Asp.net mvc 3 从Post返回后,绑定到视图模型的MVC3 Razor-TextBoxFor()值未正确更新
“我的视图”在html表中显示一系列行。这些行按数据库中的排名顺序排列。html表中的一列是一个文本框,允许用户修改此排名顺序。表格底部有一个更新提交按钮,允许用户保存此新订单。我遇到的问题是,排名顺序正确地更新到数据库中,但是当控制器返回到视图时,屏幕上的所有数据都正确地更新了,但是文本框中的值没有更新Asp.net mvc 3 从Post返回后,绑定到视图模型的MVC3 Razor-TextBoxFor()值未正确更新,asp.net-mvc-3,c#-4.0,razor,Asp.net Mvc 3,C# 4.0,Razor,“我的视图”在html表中显示一系列行。这些行按数据库中的排名顺序排列。html表中的一列是一个文本框,允许用户修改此排名顺序。表格底部有一个更新提交按钮,允许用户保存此新订单。我遇到的问题是,排名顺序正确地更新到数据库中,但是当控制器返回到视图时,屏幕上的所有数据都正确地更新了,但是文本框中的值没有更新 Order | Data ================================================ 10 | Item 1 20
Order | Data
================================================
10 | Item 1
20 | Item 2
30 | Item 3
Lets say the user makes the following changes
Order | Data
================================================
50 | Item 1
20 | Item 2
10 | Item 3
Now User hits update and what is rendered is:
Order | Data
================================================
50 | Item 3
20 | Item 2
10 | Item 1
(Note data was sorted correctly but values of TextBoxFor did not update)
我的视图代码
@using (Html.BeginForm("UpdateRanks", "MyController")) {
<table cellpadding="0" cellspacing="0" width="100%">
@for (int i = 0; i < Model.DbSelections.Count; i++) {
var item = Model.DbSelections[i];
<tr>
<td>
@Html.TextBoxFor(m => m.DbSelections[i].Rank, new { @class = "NarrowTextBox" })
</td>
<td>
@Model.DbSelections[i].Rank (works!), @item.ItemName<br />
</td>
</tr>
}
<input type="submit" value="Update" name="updateaction" class="StandardButton"/>
</table>
}
使用(Html.BeginForm(“UpdateRanks”、“MyController”)){
@for(int i=0;i} } 控制器代码:
[HttpPost]
[MultiButton(MatchFormKey = "updateaction", MatchFormValue = "Update")]
public ActionResult UpdateRanks(MyViewModel model) {
if (ModelState.IsValid) {
MyRepository myRepo = new MyRepository();
<!-- saves updated ranks to database - it works -->
myRepo.UpdateAutoPicks(...);
<!-- after saved ranks above, now reload data including ranks from database -->
<!-- debugging shows that data and ranks and ordering is correct->
model.DbSelections = myRepo.GetItems();
return View("Index", model);
} else {
<!-- blah -->
}
return View("Index", model);
}
[HttpPost]
[多按钮(MatchFormKey=“updateaction”,MatchFormValue=“Update”)]
公共操作结果更新程序(MyViewModel模型){
if(ModelState.IsValid){
MyRepository myRepo=新建MyRepository();
myRepo.UpdateTopicks(…);
}
返回视图(“索引”,模型);
}
看看这个是否能帮到你
使用此解决方案的一个警告是,您将丢失使用TextBoxFor()的任何内置功能,例如验证。如果这不起作用,您可以尝试使用ModelState.Clear()清除发布的值(有关更多详细信息,请参阅)。我遇到了相同的问题,控制器中的ModelState.Clear()解决了此问题。但是,我不确定这样做是否正确。您不必清除整个ModelState,只需清除您希望更新的ModelState。。。 这可能会减少不必要的副作用: 例如,我有一段代码将用户提供的电话号码格式化为美国10位数格式,而不仅仅是验证它。这将在以下位置返回此字段的“已清除”值: ModelState[“Phone”].Value=新的ValueProviderResult(dummyph,dummyph,System.Globalization.CultureInfo.CurrentUICulture)