javascript - Html.DropDownListFor 和 JavaScript 数组

标签 javascript jquery asp.net-mvc razor

我在 MVC Asp.NET 应用程序的“创建 View ”页面上实现了级联下拉列表。

不幸的是,我在选择位于 JavaScript 数组中的值时遇到问题。我需要绑定(bind)所选值以使用我的 Controller 之一。

现在我的列表已填充,但我无法选择它。有没有办法将 counties[i] 数组从我的 JavaScript 移动到 @Html.DropDownListFor() 帮助器?

谢谢!

JavaScript:

<script src="@Url.Content("~/Scripts/jquery-1.10.2.min.js")"
    type="text/javascript"></script>

<script language="javascript" type="text/javascript">
$(document).ready(function() {
    $("#county").prop("disabled", true);
    $("#StateLongName").change(function() {
        if ($("#StateItems").val() != "Please select") {
            var options = {};
            options.url = "/County/GetCounties";
            options.type = "POST";
            options.data = JSON.stringify({ state: $("#StateLongName").val() });
            options.dataType = "json";
            options.contentType = "application/json";
            options.success = function(counties) {
                $("#county").empty();
                for (var i = 0; i < counties.length; i++) {
                    $("#county").append("<option>" +  counties[i] + "</option>");
                }
                $("#county").prop("disabled", false);
            };
            options.error = function() { alert("Error retrieving counties!"); };
            $.ajax(options);
        } else {
            $("#county").empty();
            $("#county").prop("disabled", true);
        }
    });
});
</script>

Controller :

//GET Counties for Cascading Dropdown List
    public JsonResult GetCounties(string state)
    {

        var counties = db.countycigtaxes.Join(db.statecigtaxes,
            cc => cc.stateid,
            sc => sc.stateid,
            (cc, sc) => new
            {
                cc,
                sc
            }).Where(co => co.sc.statefullname == state)
            .Select(co => co.cc.countyfullname).ToList();

        return Json(counties);
    }

查看页面:

<div class="form-group">
        @Html.LabelFor(model => model.StateLongName, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.DropDownListFor(m => m.StateLongName, Model.StateItems, "Please select")
            @Html.ValidationMessageFor(model => model.StateLongName)
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.CountyLongName, new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @*@Html.DropDownListFor(m => m.CountyLongName, )*@
            <select id="county"></select>
            @Html.ValidationMessageFor(model => model.CountyLongName)
        </div>
    </div>

最佳答案

我假设您的意思是,当您提交表单时,属性 CountyLongName 的选定值不会发回。您已注释掉这一行

@Html.DropDownListFor(m => m.CountyLongName, )

并使用

<select id="county"></select>

如果你想要手动版本(我不推荐这样做),那么你需要添加一个与属性名称匹配的 name 属性,以便它可以被 ModelBinder 绑定(bind)

<select name="CountyLongName" id="county"></select>

但最好使用助手并向其传递一个空的 SelectList

Html.DropDownListFor(m => m.CountyLongName, Model.CountryNames)

其中 Model.CountryNames 是 View 模型中的一个属性,它被初始化为空的 SelectList

另请注意 options.type = "POST"; 应为“GET”,整个 AJAX 可以简化为

$.get('@Url.Action("GetCounties","Country")', { state: $('#StateLongName').val() }, function(countries) {...

并且 JsonResult 方法中不需要 ToList()

关于javascript - Html.DropDownListFor 和 JavaScript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25192022/

相关文章:

javascript - 匹配后面没有特定单词的第二个单词

javascript - 如何使用 bootstrap modal 编辑 MVC 中的表数据?

c# - 将生成的 HTML 传递给 View 并用 Url.Action 替换链接

asp.net-mvc - 验证 ASP.NET MVC 中的 ViewModel

javascript - 如何为移动应用程序进行滚动定制?

javascript - x 可编辑重置字段

javascript - 无法在 SVG 路径元素上执行单击事件

javascript - VueJS : Difference of data() { return {} } vs data:() => ({ })

javascript - 如何将 bootstrap 年历与 mysql 库连接

php - 如何将php中elseif的结果获取到jquery