arn*_*rob 45 asp.net-mvc html-helper asp.net-mvc-3 html.hiddenfor
@Html.HiddenFor(model => model.title, new { id= "natureOfVisitField", @value = '@Model.title'})
Run Code Online (Sandbox Code Playgroud)
它不起作用!如何设定价值?
小智 95
要在隐藏字段中设置值,请按以下方式执行:
@Html.HiddenFor(model => model.title,
new { id= "natureOfVisitField", Value = @Model.title})
Run Code Online (Sandbox Code Playgroud)
它会工作
Tej*_*gde 42
奇怪但是,试试@Value,大写"V"
例如(在MVC4上工作)
@Html.HiddenFor(m => m.Id, new { @Value = Model.Id })
Run Code Online (Sandbox Code Playgroud)
更新:
发现@Value(大写V)创建了另一个带有"Value"和"value"的属性,使用小@value似乎也在起作用!
需要检查MVC源代码以找到更多信息.
更新,了解内部工作原理:
首先忘记所有这些解决方法(我为了连续性而保持这里),现在看起来很傻:)
基本上,它发生在发布模型并将模型返回到同一页面时.
使用以下代码片段在InputHelper方法(InputExtensions.cs)中访问(并形成html)该值
string attemptedValue = (string)htmlHelper.GetModelStateValue(fullName, typeof(string));
Run Code Online (Sandbox Code Playgroud)
GetModelStateValue方法(在Htmlelper.cs中)检索值为
ViewData.ModelState.TryGetValue(key, out modelState)
Run Code Online (Sandbox Code Playgroud)
这是问题,因为从ViewData.ModelState字典访问该值.这将返回从页面发布的值而不是修改值!!
即如果你张贴的变量(例如Person.Id)的值是0,但你设置httpPost动作里面的值(例如Person.Id = 2),将ModelState中仍保留旧值"0"和attemptedValue含有"0" !所以渲染页面中的字段将包含"0"作为值!!
如果要将模型返回到同一页面,则解决方法:从ModelState清除项目,例如ModelState.Remove("Id");
这将从字典中删除该项, ViewData.ModelState.TryGetValue(key,out modelState)返回null,下一个语句(在InputExtensions.cs中)将实际值(valueParameter)传递给HiddenFor(m => m.Id )
这在InputExtensions.cs的以下行中完成
ModelState.Remove("Id");
Run Code Online (Sandbox Code Playgroud)
摘要:使用ModelState.Remove("...")清除ModelState中的项目;
希望这是有帮助的.
Dan*_*ite 27
您不需要在attributes参数中设置值.MVC应该自动绑定它.
@Html.HiddenFor(model => model.title, new { id= "natureOfVisitField" })
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
109490 次 |
最近记录: |