【发布时间】:2013-10-01 20:07:44
【问题描述】:
我有一个类似的模型类
public class Mod
{
public string StaticProp1 {get; set;}
public string StaticProp2 {get; set;}
public string EditableProp1 {get; set;}
}
我想要一个可以编辑EditableProp1 但StaticProp1、StaticProp2 显示但不可编辑的视图。
我创建了一个强类型视图:
@model Mod
@using (Html.BeginForm())
{
<p>@Model.StaticProp1</p>
<p>@Model.StaticProp2</p>
@Html.TextBoxFor(m => m.EditableProp1)
<input type="submit" value="Save" />
}
在我的控制器中,当我处理操作时,我发现 EditableProp1 很好。
[HttpPost]
public ActionResult Edit(Mod model, FormCollection collection)
{
string editableProp = model.EditableProp1; //This works fine
string staticProp1 = model.StaticProp1; //Missing
return View(model);
}
如果我出于某种原因回帖,这会导致问题,因为 staticProp1 现在将为空,并且视图将无法显示它。
我知道我可以添加
@Html.HiddenFor(m => m.StaticProp1)
@Html.HiddenFor(m => m.StaticProp2)
在我看来,它会正常工作,但我想知道是否有其他更好的方法。
我的价值观已经在表单上 (<p>@Model.StaticProp1</p>)。有没有办法将模型绑定到这样的不可编辑标签?是否有一个 HTML 助手可以做这样的事情?
顺便说一句,如果不是很明显,我只是从 MVC 开始,所以如果我完全没有理解重点,请告诉我!
【问题讨论】:
-
如果
StaticProp来自数据库什么的,可以再次读入,在回发方法中设置模型数据 -
为什么要避免 HiddenFor?这是它的一个常见用例。
-
我想避免它,因为其中有很多(我的模型比我在这里展示的更复杂)。只是感觉他们把视图弄乱了,因为价值观已经在表格上,我想也许还有另一种方式。类似@Html.LiteralFor(...)
-
好吧,您可以使用带有自定义 css 类(删除文本框装饰)和 readonly 属性的@Html.TextBoxFor,因此它无法更新或创建您自己的帮助器以使其更清晰.
标签: c# asp.net asp.net-mvc razor http-post