【问题标题】:MVC Model Binding - Maintaining values during a partial editMVC 模型绑定 - 在部分编辑期间维护值
【发布时间】:2013-10-01 20:07:44
【问题描述】:

我有一个类似的模型类

public class Mod
{
    public string StaticProp1 {get; set;}
    public string StaticProp2 {get; set;}

    public string EditableProp1 {get; set;}
}

我想要一个可以编辑EditableProp1StaticProp1StaticProp2 显示但不可编辑的视图。

我创建了一个强类型视图:

@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)

在我看来,它会正常工作,但我想知道是否有其他更好的方法。

我的价值观已经在表单上 (&lt;p&gt;@Model.StaticProp1&lt;/p&gt;)。有没有办法将模型绑定到这样的不可编辑标签?是否有一个 HTML 助手可以做这样的事情?

顺便说一句,如果不是很明显,我只是从 MVC 开始,所以如果我完全没有理解重点,请告诉我!

【问题讨论】:

  • 如果StaticProp来自数据库什么的,可以再次读入,在回发方法中设置模型数据
  • 为什么要避免 HiddenFor?这是它的一个常见用例。
  • 我想避免它,因为其中有很多(我的模型比我在这里展示的更复杂)。只是感觉他们把视图弄乱了,因为价值观已经在表格上,我想也许还有另一种方式。类似@Html.LiteralFor(...)
  • 好吧,您可以使用带有自定义 css 类(删除文本框装饰)和 readonly 属性的@Html.TextBoxFor,因此它无法更新或创建您自己的帮助器以使其更清晰.

标签: c# asp.net asp.net-mvc razor http-post


【解决方案1】:

您想要保留的模型的每个属性都必须在表单中(在编辑器或隐藏字段中)。您可以按照您的建议使用Html.HiddenFor()。如果您想避免隐藏字段使视图过载,您可以仅将实体的 id 存储在隐藏字段中,并根据 Post 操作中的 id 获取其余数据。或者将Html.TextBoxFor()readonly 属性一起使用,有关它的更多信息,请参见this question(我也喜欢第二个答案中的方法)。

【讨论】:

  • 我相信disabled属性会导致字段不发帖,这是他目前的问题。 readonly 属性是他想要的。
  • 这是有道理的,我认为readonly 属性确实是要走的路。我添加了一个相关问题。
  • 谢谢,方法工作正常。我只是想确保我没有遗漏任何似乎并非如此的明显内容。
【解决方案2】:

我认为这个问题更多地与模型绑定及其工作方式有关。如果您不想在这里使用隐藏字段(我认为这适合您的场景),您可以通过从以下位置继承一个类来自定义模型绑定:

DefaultModelBinder  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-20
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多