即使条件为 true,也不会显示 CSHTML 页面中@if条件内的元素

elements inside @if condition in CSHTML page is not displayed even when the condition is true

提问人:Govind Ramesh 提问时间:8/23/2022 最后编辑:Yiyi YouGovind Ramesh 更新时间:8/24/2022 访问量:271

问:

这是我的CSHTML页面。

    <div>
        <table cellpadding="8">
            <tr>
                <th>File Path</th>
                <td>@Html.TextBoxFor(Model => Model.returnFilename, new { id = "filepath" })</td>
            </tr>
        </table>



        @if (Model != null)
        {
            <table cellpadding="8">
                <tr>
                    <th>File Names</th>
                    <td>
                        @Html.DropDownListFor(Model => Model.getFileNamesList, new SelectList(Model.getFileNamesList, "getFilepath", "getFileNames"), " -- Select File --", htmlAttributes: new { style = "width: 200px;" })
                    </td>
                </tr>
            </table>
        }
    </div>

 <script type="text/javascript">
        $(function () {
            console.log("in script");
            $("[id$=filepath]").on('change', function () {
                $.ajax(
                    {
                        type: 'POST',
                        dataType: 'JSON',
                        url: '/Home/LoadFiles',
                        data: { filePath: $(this).val() }
                    })
            })
        })
    </script>

当在文本框中输入内容并返回时,将进行 JavaScript 调用。这将调用控制器方法并获取下拉列表的详细信息。

控制器方法。

 public ActionResult LoadFiles(string filePath, FeatureDisplayListModel getFileName)
        {
            ModelState.Clear();

            string errorMessage = "";

            GetFilesModel objFileNames = new GetFilesModel();

            try
            {
                string[] fileEntries = Directory.GetFileSystemEntries(filePath);

                foreach (string fileName in fileEntries)
                {
                    if (getFileName.getFileNamesList == null)
                    {
                        getFileName.getFileNamesList = new List<GetFilesModel>();
                    }

                    string trimFileName = Path.GetFileName(fileName);
                    objFileNames.getFileNames = trimFileName;
                    objFileNames.getFilepath = fileName;

                    getFileName.getFileNamesList.Add(objFileNames);
                }

                getFileName.isFileName = true;
            }
            catch (Exception ex)
            {
                errorMessage = "NO TAG FOUND";
                //featAndChannel.returnFilename = featureID + " - " + childFeatureID + " " + errorMessage;
                return View("Index", getFileName);
            }

            return View("ConfigChecker", getFileName);
        }

当详细信息被提取并返回到视图时。封装下拉列表的@if条件不起作用。尽管它进入了@if块,但它没有显示其中的下拉列表。

asp.net-mvc asp.net-core if-statement 剃刀

评论

0赞 Abdul Haseeb 8/23/2022
你能给我们上课吗FeatureDisplayListModel
0赞 Govind Ramesh 8/23/2022
请看模型类@abdul ''' namespace ConfigChecker.Models { public class FeatureDisplayListModel { //public List<FeatureDisplayModel> featChannelList { get; set; } public List<GetFilesModel> getFileNamesList { get; set; } public string returnFilename { get; set; } public bool isFileName { get; set; } } }

答:

0赞 Yiyi You 8/24/2022 #1

如果你想从使用ajax的动作中获取数据,你可以尝试将类型数据返回到ajax,然后将html添加到带有数据的下拉列表中:List<GetFilesModel>

行动:

public List<GetFilesModel> LoadFiles(string filePath, FeatureDisplayListModel getFileName)
        {
            ModelState.Clear();

            string errorMessage = "";

            GetFilesModel objFileNames = new GetFilesModel();

            try
            {
                string[] fileEntries = Directory.GetFileSystemEntries(filePath);

                foreach (string fileName in fileEntries)
                {
                    if (getFileName.getFileNamesList == null)
                    {
                        getFileName.getFileNamesList = new List<GetFilesModel>();
                    }

                    string trimFileName = Path.GetFileName(fileName);
                    objFileNames.getFileNames = trimFileName;
                    objFileNames.getFilepath = fileName;

                    getFileName.getFileNamesList.Add(objFileNames);
                }

                getFileName.isFileName = true;
            }
            catch (Exception ex)
            {
                errorMessage = "NO TAG FOUND";
                //featAndChannel.returnFilename = featureID + " - " + childFeatureID + " " + errorMessage;
                return getFileName.getFileNamesList ;
            }

            return getFileName.getFileNamesList ;
        }

阿贾克斯:

$(function () {
        console.log("in script");
        $("[id$=filepath]").on('change', function () {
            $.ajax(
                {
                    type: 'POST',
                    dataType: 'JSON',
                    url: '/Home/LoadFiles',
                    data: { filePath: $(this).val() },
                    success: function (data) {
                    var items = '';
                    $("#getFileNamesList").empty();
                    $.each(data, function (i, FileNamesList) {
                         items += "<option value='" + FileNamesList.getFilepath + "' selected>" + FileNamesList.getFileNames + "</option>";

                    });
                    $('#getFileNamesList').html(items);
                    
            },

                
        })
    })