这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(包含已发布的值)包含传递的“name”的值,它将使用该值而不是传递给helper方法的值。就我而言,我更新了模型并且没有输出更新的值。
如果我将值传递给方法,我希望渲染该值。
我错过了这个设计中的某些内容还是错了?
答案 0 :(得分:2)
这是设计的。这是预期的流程:
Html.Hidden
的值。但是,有问题的功能与用户输入更直接相关,因此请考虑Html.TextBox("someName", Model.SomeValue)
在这种情况下,处理POST的操作将返回ViewResult,从而导致重新呈现步骤3中的视图。但是,用户将看到他们输入的值(因此他们可以修复它)而不是模型对象的值。这里的想法是,由于类型安全,用户输入的数据可能无法表示为Model.SomeValue
中的值。例如,如果Model.SomeValue
的类型为整数,并且用户输入了“ABC”,则重新呈现用户数据的唯一方法是将其放在其他位置。那个“其他地方”就是ModelState。
重新显示用户的无效数据,用户可以修改他们输入的数据并重新发布表单。