TextBoxFor值在post后没有更新
我有一个简单的强类型视图,但我似乎无法在post后更新我的表单上的文本框。
这是我的模型:
public class Repair { public string Number { get; set; } }
在我看来是一个TextBox:
@Html.TextBoxFor(x => x.Number)
我试图在post到我的控制器后更新文本框:
[AcceptVerbs(HttpVerbs.Post)] public ActionResult Index(Repair r) { r.Number = "New Value"; return View(r); }
即使我将Number设置为新值,文本框中的文本也不会更改。 我究竟做错了什么?
在设置值之前使用ModelState.Clear()
[AcceptVerbs(HttpVerbs.Post)] public ActionResult Index(Repair r) { ModelState.Clear(); //Added here r.Number = "New Value"; return View(r); }
将模型发布回ActionResult并返回相同的View时,模型对象的值包含在ModelState中。 ModelState包含有关有效/无效字段以及实际POSTed值的信息。 如果要更新模型值,可以执行以下两项操作之一:
ModelState.Clear()
要么
ModelState["Number"].Value = new ValueProviderResult("New Value", "New Value", CultureInfo.CurrentCulture)
从我处理这个问题开始,我觉得这是框架中的设计错误。 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)
是正确的,但太神秘了。 因此,在这种情况下,我的偏好是使用:
代替
@Html.TextBoxFor(x => x.Number)
如果发现ModelState.Clear()过于具有破坏性,则只能定位要更改的项目,同时使用ModelState.Remove()保留其余项目。
[AcceptVerbs(HttpVerbs.Post)] public ActionResult Index(Repair r) { r.Number = "New Value"; ModelState.Remove("Number"); return View(r); }
此外,无论是在更新模型之前还是之后调用该方法,使用Remove()或Clear()都无关紧要。
试试这个。 如果需要,可以将其放在基本控制器中。 它对我很有用。 这使得它如此不引人注目的validation仍然有效,但模型中的值通过正确显示为EXPECTED。
上述就是C#学习教程:TextBoxFor值在post后没有更新分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public class BaseController : Controller { public override void OnActionExecuted(ActionExecutedContext context) { ModelState.ToList().Select(x => x.Value).ToList().ForEach(x => { x.AttemptedValue = null; x.RawValue = null; }); // Do a bunch of stuff here if needed. Stuff like validation. base.OnActionExecuted(context); } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1031643.html