3

我有一个模型类,就像

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 现在将为 null 并且视图将无法显示它。

我知道我可以添加

@Html.HiddenFor(m => m.StaticProp1)
@Html.HiddenFor(m => m.StaticProp2)

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

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

顺便说一句,如果不是很明显,我只是从 MVC 开始,所以如果我完全错过了这一点,请告诉我!

4

2 回答 2

2

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

于 2013-10-01T20:25:32.630 回答
1

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

DefaultModelBinder  
于 2013-10-02T06:56:14.623 回答