我对MVC还很陌生,我想知道我是否以正确的方式实现了以下内容。
我有一个正在foreach循环中构建的表。每行都有一个下拉框。我使用jQuery将eventlistener附加到下拉列表以进行更改。在onchange事件中,我发布了我的数据。现在我最关心的是如何检索已更改的行的数据。我目前正在使用隐藏字段。在webforms中,这可能是一个简单的转发器,而且所有数据都可以在回发时使用。 请在下面找到我的循环的基本版本。
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Bar)
</td>
<td>
@Html.DropDownListFor(modelItem => item.Foo, new SelectList(item.Foos, "Id", "Name", item.FooID), htmlAttributes: new { @class = "form-control ddlFoo" })
@Html.HiddenFor(modelItem => item.Bar, htmlAttributes: new { @class = "hfBar" })
</td>
</tr>
}
这是正确的做法吗?或者更好的方法是什么? 感谢您帮助MVC新手
******************** UPDATE ********************* 我的控制器方法如下:
public JsonResult UpdateFooBar(int FooID, int BarID)
{
if(dosomething(FooID, BarID)
return Json(HttpStatusCode.OK);
else
return Json(HttpStatusCode.InternalServerError);
}
jQuery是一个简单的ajax帖子。一切正常,我不确定这是否是最好的做事方式,因为DOM更改可能会破坏jQuery脚本
$('.ddlFoo').change(function () {
var BarID = $(this).next(".hfBar").val();
var FooID = $(this).val();
var FooBar= {"BarID": BarID , "FooID ": FooID};
$.ajax({
url: '@Url.Action("UpdateFooBar", "FooBar")',
data: JSON.stringify(FooBar),
contentType: "application/json",
dataType: "json",
type: "POST",
success: function () {
}
});
});