c# - MVC 模型绑定(bind) - 在部分编辑期间维护值

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

我有一个模型类,如下所示

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

    public string EditableProp1 {get; set;}
}

我想要一个可以编辑的 View EditableProp1但是在哪里StaticProp1 , StaticProp2显示但不可编辑。

我创建了一个强类型 View :

@model Mod

@using (Html.BeginForm()) 
{
    <p>@Model.StaticProp1</p>
    <p>@Model.StaticProp2</p>

    @Html.TextBoxFor(m => m.EditableProp1)

    <input type="submit" value="Save" />
}

在我的 Controller 中,当我处理 Action 时,我发现 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, View 将​​无法显示它。

我知道我可以添加

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

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

我的值已经在表格中 ( <p>@Model.StaticProp1</p> )。有没有办法将模型绑定(bind)到这样的不可编辑标签?是否有 HTML 帮助器可以执行类似的操作?

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

最佳答案

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

关于c# - MVC 模型绑定(bind) - 在部分编辑期间维护值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19124950/

相关文章:

c# - 随着时间的推移使峰值使用变平的算法?

c# - 如果 .Count == 0 条件运算符不显示

asp.net-mvc - ASP.NET MVC 并将 ID 传递给强类型 BeginForm

asp.net-mvc - ASP MVC 迁移错误 : Type is not resolved for member

c# - 如何比较可为空的 int 和 int

c# - 读取 JSON 文件中的百万个字符时出现异常 [OutOfMemoryException]

c# - 托管 WinRT API 是否包括计算 MD5 哈希的方法?

c# - 我应该为新的 CRUD asp.net 应用程序使用 SubSonic 还是动态数据?

asp.net - 让 ASP.NET MVC Web 应用程序加载域中性

c# - 如何在 ASP.NET Web API 核心中全局启用 CORS