0

选择标记应该如何准确地映射到 MVC 模型变量,我已经尝试了所有我能想到的方法,但是每次我检查控制器上的 post 方法时,应该绑定到下拉列表的变量返回 null。

看法:

<script type="text/javascript">
var counter = 1;
$('#btnAddLocation').click(function (e) {
    e.preventDefault();
    $("#tblAddLocation").find('tbody')
            .append($('<tr>')
                .append($('<td>')
                    .append($('@Html.LabelFor(m => m.Location)')
                    )
                )
                .append($('<td>')
                    .append($('<select name=Location id=Location' + counter++ + ' class=gradientTextbox>')
                    )
                )
                .append($('<td>')
                    .append($('@Html.LabelFor(m => m.Description)')
                    )
                )
                .append($('<td>')
                    .append($('@Html.EditorFor(m => m.Description)')
                    )
                )
            );

    $.getJSON("/Locations/GetAllLocations", function (data) {
        var items = "<option selected></option>";
        $.each(data, function (i, item) {
            items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
        });

        $("#Location" + (counter - 1)).html(items);
    });
});
</script>

控制器:

[HttpPost]
    public ActionResult ActionName(MyModel model, List<string> Location, List<string> Description) {
        return Json(new { success = true });
    }

控制器代码中的 Description 变量工作正常,但 Location 列表返回正确的计数,但所有项目均为空。

有关如何处理此问题的任何建议?

4

2 回答 2

0

为了使绑定起作用,Location应该是一个string值。它不会通过所有<option>的,而是会通过当前的selectedvalue

[HttpPost]
public ActionResult ActionName(MyModel model, string Location, List<string> Description) {
    return Json(new { success = true });
}
于 2012-09-09T02:27:00.223 回答
0

好吧,我想出了解决方案。

Html.DropDownListFor 版本

<select id="Location" name="Location" class="gradientTextbox">
    <option>option 1</option>
    <option>option 2</option>
    <option>option 3</option>

我的版本

<select id="Location1" class="gradientTextbox" name="Location">
    <option selected=""></option>
    <option value="null">option 1</option>
    <option value="null">option 2</option>
    <option value="null">option 3</option>

注意到细微的差别,问题的真正问题在于这行代码:

items += "<option value='" + item.Value + "'>" + item.Text + "</option>";

为了修复我的代码,上述行应替换为:

items += "<option>" + item.Text + "</option>";

问题已解决。感谢@Gabe 的帮助

于 2012-09-09T02:52:53.713 回答