@Html.HiddenFor(model => model.title, new { id= "natureOfVisitField", @value = '@Model.title'})
它不起作用!如何设置值?
@Html.HiddenFor(model => model.title, new { id= "natureOfVisitField", @value = '@Model.title'})
它不起作用!如何设置值?
要在隐藏字段中设置值,可以按照以下方式操作:
@Html.HiddenFor(model => model.title,
new { id= "natureOfVisitField", Value = @Model.title})
它会工作
奇怪但是,请尝试使用@Value
,大写字母"V"
例如(适用于MVC4)
@Html.HiddenFor(m => m.Id, new { @Value = Model.Id })
更新:
发现@Value(大写V)会创建另一个带有“Value”属性的“value”,使用小写的@value似乎也可以正常工作!
需要检查MVC源代码以获取更多信息。
更新,在深入了解其内部工作方式后:
首先,请忘记所有这些解决方法(我为了连续性而保留的),现在看起来很傻 :)
基本上,当模型被发布并将模型返回到同一页面时,就会发生这种情况。
使用以下代码片段在InputHelper方法(InputExtensions.cs)中访问值(并形成html):
string attemptedValue = (string)htmlHelper.GetModelStateValue(fullName, typeof(string));
GetModelStateValue方法(位于Htmlelper.cs中)以原样检索值。
ViewData.ModelState.TryGetValue(key, out modelState)
这里的问题在于,由于从 ViewData.ModelState
字典中访问了值,所以返回的是页面提交的值,而不是修改后的值!ModelState.Remove("Id");
这将从字典中删除该项,ViewData.ModelState.TryGetValue(key, out modelState)返回 null,接下来的语句(在 InputExtensions.cs 内部)获取传递给 HiddenFor(m => m.Id) 的实际值 (valueParameter)。
这是在 InputExtensions.cs 中以下行中完成的。
tagBuilder.MergeAttribute("value", attemptedValue ?? ((useViewData) ? htmlHelper.EvalString(fullName, format) : valueParameter), isExplicitValue);
摘要:
使用以下代码清除ModelState中的项目:
ModelState.Remove("...");
希望这对你有所帮助。
ModelState.Remove("Invoice.InvoiceId");
- shlgug您不需要在属性参数中设置值。MVC 应该会自动为您绑定。
@Html.HiddenFor(model => model.title, new { id= "natureOfVisitField" })
[HttpGet]
,或类似的东西。不幸的是,我现在没有时间回去重新创建它并找出问题所在。 - 15ee8f99-57ff-4f92-890c-b56153仅仅是值,不是 @value。
试试看。我不确定 @Model.title,可能只是 Model.title。
Value
区分大小写。 - RoLYroLLs我最近遇到了一个问题,想要给一个已有的实体添加一个相关属性。为了解决这个问题,我写了一个好用的扩展方法:
public static MvcHtmlString HiddenFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, TProperty value)
{
string expressionText = ExpressionHelper.GetExpressionText(expression);
string propertyName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(expressionText);
return htmlHelper.Hidden(propertyName, value);
}
@Html.HiddenFor(m => m.RELATED_ID, Related.Id)
需要注意的是,这个方法和内置的 HiddenFor 签名类似,但使用了泛型类型。所以,如果 Value 是 System.Object 类型,你实际上会调用框架内置的 HiddenFor 方法。不过我不确定为什么你会在视图中编辑 System.Object 类型的属性...
在指定HtmlAttributes时,@符号用于"thing"是c#关键字的情况。例如,单词class,您不能指定class,必须使用@class。
你可以这样做
@Html.HiddenFor(model=>model.title, new {ng_init = string.Format("model.title='{0}'", Model.title) })