Asp.net mvc 3 MVC3HTML属性

Asp.net mvc 3 MVC3HTML属性,asp.net-mvc-3,Asp.net Mvc 3,我一直在玩MVC。我目前被html助手方法难住了。我注意到的一点是,我不能将ASP.NET Web表单逻辑应用到MVC中。为了进一步解释,我可以在ASP.NET中创建一个Label控件,并为其分配一些文本数据,然后读取文本数据 然而,在MVC中,我似乎不能对@Html.LabelFor//Html.Label做同样的事情,我已经意识到,一旦从表单中发布帖子,标签中的值就不会绑定回我的视图模型。但是,如果我使用EditorFor或TextBoxFor,我可以在发布时获得绑定到viewmodel的值

我一直在玩MVC。我目前被html助手方法难住了。我注意到的一点是,我不能将ASP.NET Web表单逻辑应用到MVC中。为了进一步解释,我可以在ASP.NET中创建一个Label控件,并为其分配一些文本数据,然后读取文本数据

然而,在MVC中,我似乎不能对@Html.LabelFor//Html.Label做同样的事情,我已经意识到,一旦从表单中发布帖子,标签中的值就不会绑定回我的视图模型。但是,如果我使用EditorFor或TextBoxFor,我可以在发布时获得绑定到viewmodel的值

我的问题是,我应该使用什么html hlper方法将文本显示为只读,但在发布后仍能够绑定回我的viewmodel?我尝试过TextBoxFor,其html属性设置为disabled和readonly,但没有成功

感谢你的指点。
谢谢

您应该能够将
只读
属性绑定到
文本框
,方法是将
htmlAttributes
作为
TextBoxFor
方法的第二个参数传入:

<%=Html.TextBoxFor(m => m.SomeProperty, new { @readonly = "readonly" }) %>
但这没有多大意义,因为通常的语法是:

<%=Html.LabelFor(m => m.SomeProperty) %>
<%=Html.TextBoxFor(m => m.SomeProperty) %>
m.SomeProperty)%%>
m、 SomeProperty)%%>


请注意,如果使用
disabled
属性,则在提交表单时不会发布输入

您应该能够通过将
htmlAttributes
作为
TextBoxFor
方法的第二个参数传入,将
readonly
属性绑定到
TextBox

<%=Html.TextBoxFor(m => m.SomeProperty, new { @readonly = "readonly" }) %>
但这没有多大意义,因为通常的语法是:

<%=Html.LabelFor(m => m.SomeProperty) %>
<%=Html.TextBoxFor(m => m.SomeProperty) %>
m.SomeProperty)%%>
m、 SomeProperty)%%>


请注意,如果使用
disabled
属性,则在提交表单时将不会发布输入

这是预期的行为,只有值表单元素在发布时添加到模型中,因此标签将被忽略。要绕过此问题,请在隐藏字段中复制标签值

Html.HiddenFor(model => model.FieldName)


这是预期的行为,只有表单元素的值在POST中添加到模型中,所以标签将被忽略。要绕过此问题,请在隐藏字段中复制标签值

Html.HiddenFor(model => model.FieldName)


您如何尝试绑定此属性?谢谢您的回复。我的标记中的绑定为:@html.Label(Model.Username)。本质上,在POST上,我有一个操作方法PublicViewFormPost(MyViewModelVM)。我只需提取变量“vm”的内容并将其粘贴到服务方法中。您如何尝试绑定此属性?感谢您的回复。我的标记中的绑定为:@html.Label(Model.Username)。本质上,在POST上,我有一个操作方法PublicViewFormPost(MyViewModelVM)。我只需提取变量“vm”的内容并将其粘贴到服务方法中。我需要将某些数据显示为只读或标签控件中的原因很简单,这是因为表单的操作性质。正如我前面所说,我的标签需要显示我的属性值,即model.UserName,它可能包含“peterparker”。您所写的关于HiddenFor字段的内容是解决我的问题的最简单的方法。另外请注意,您不能使用
Html.EditorFor()
方法如果您需要指定HTMLAttributes,您必须使用类似
TextBoxFor()
DropDownListFor()
,等等。直到我仔细查看了我的方法调用之后,我才意识到我调用了错误的方法来允许传递HtmlAttributes。我需要将某些数据显示为只读或标签控件中的原因仅仅是由于表单操作的性质。正如我前面所说,我的标签需要显示我的属性值,即model.UserName,它可能包含“peterparker”。您所写的关于HiddenFor字段的内容是解决我的问题的最简单的方法。另外请注意,您不能使用
Html.EditorFor()
方法如果您需要指定HTMLAttributes,您必须使用类似
TextBoxFor()
DropDownListFor()
,直到我仔细查看了我的方法调用之后,我才意识到我调用了错误的方法来允许传递HtmlatAttributes。