gpt4 book ai didi

asp.net - 为什么输入元素不呈现在 ASP.Net MVC 中传递的值?

转载 作者:行者123 更新时间:2023-12-02 19:48:13 24 4
gpt4 key购买 nike

这个post问这个问题但并没有真正给出答案,所以我想我会以不同的方式问这个问题。

我有一个页面,可以从模型中呈现隐藏值:

<%=Html.Hidden("myName", model.myValue) %>

由于我在 value 参数中传递一个值,您可能会认为它会输出该值,但事实并非如此。

渲染输入字段的代码如下:

string attemptedValue = (string)htmlHelper.GetModelStateValue(name, typeof(string));
tagBuilder.MergeAttribute("value", attemptedValue ?? ((useViewData) ? htmlHelper.EvalString(name) : valueParameter), isExplicitValue);

基本上,如果 ModelState(包含发布的值)包含传递的“名称”值,它将使用该值而不是传递给辅助方法的值。就我而言,我更新了模型,但更新后的值未输出。

如果我将值传递给方法,我希望呈现该值。

我在这个设计中遗漏了一些东西还是它只是错误的?

最佳答案

这是设计使然。这是预期的流程:

  1. 用户请求某个 URI。
  2. 您的 Controller 构建了一个模型。
  3. View 已渲染。此时 ModelState 字典应该为空,因此将呈现您传递给 Html.Hidden 的值。但是,所讨论的功能与用户输入更直接相关,因此请考虑 Html.TextBox("someName", Model.SomeValue)
  4. 现在假设用户输入了一些无效数据。如果您有客户端验证,这将在 POST 之前被捕获,但我们假设您没有,或者用户以某种方式规避了它。

在这种情况下,处理 POST 的操作将返回一个 ViewResult,导致步骤 3 中的 View 被重新渲染。但是,用户将看到他们输入的值(以便他们可以修复它),而不是模型对象中的值。这里的想法是,由于类型安全性,用户输入的数据可能无法表示为 Model.SomeValue 中的值。例如,如果 Model.SomeValue 的类型为整数,并且用户输入“ABC”,则重新呈现用户数据的唯一方法就是将其放在其他位置。而那个“其他地方”就是 ModelState。

重新显示用户的无效数据允许用户修复他们输入的数据并重新发布表单。

关于asp.net - 为什么输入元素不呈现在 ASP.Net MVC 中传递的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2478163/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com