如何将select标记映射到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列表返回正确的计数,但所有项都为null。
有关如何处理此问题的任何建议?
答案 0 :(得分:0)
要使绑定生效,Location
应为string
值。它不会通过所有<option>
,而是会传递当前的selectedvalue
[HttpPost]
public ActionResult ActionName(MyModel model, string Location, List<string> Description) {
return Json(new { success = true });
}
答案 1 :(得分: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的帮助