bro*_*oke 12 c# asp.net-mvc asp.net-mvc-4
我有一个简单的强类型视图,但我似乎无法在帖子后更新我的表单上的文本框.
这是我的模型:
public class Repair
  {
    public string Number { get; set; }      
  }
在我看来是一个TextBox:
   @Html.TextBoxFor(x => x.Number)
我试图在发布到我的控制器后更新文本框:
 [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Index(Repair r)
        {
          r.Number = "New Value";
          return View(r);
        }
即使我将Number设置为新值,文本框中的文本也不会更改.我究竟做错了什么?
Sat*_*pal 25
ModelState.Clear()在设定值之前使用
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(Repair r)
{
    ModelState.Clear(); //Added here
    r.Number = "New Value";
    return View(r);
}
Tom*_*mmy 11
将模型发布回ActionResult并返回相同的View时,模型对象的值包含在ModelState中.ModelState包含有关有效/无效字段以及实际POSTed值的信息.如果要更新模型值,可以执行以下两项操作之一:
ModelState.Clear()
要么
ModelState["Number"].Value = new ValueProviderResult("New Value", "New Value", CultureInfo.CurrentCulture)
小智 6
从我处理这个问题开始,我觉得这是框架中的设计错误.IMO:
@Html.TextBoxFor(x => x.Number) 
不应该ModelState从模型中获取值,而是直接从模型中获取值.至少这是我改变模型时的期望return View(model).
ModelState.Clear() 
不是答案,因为它ModelState消除了擦除ValidationSummary.从中删除密钥ModelState既不好,因为它删除了该密钥的ValidationSummary.
ModelState["Number"].Value = 
new ValueProviderResult("New Value", "New Value", CultureInfo.CurrentCulture)
是正确的但是太神秘了.因此,在这种情况下,我倾向于使用:
<input type="text" name="Number" id="Number" value="@Model.Number"/>
代替
@Html.TextBoxFor(x => x.Number)  
| 归档时间: | 
 | 
| 查看次数: | 12517 次 | 
| 最近记录: |