编程语言
首页 > 编程语言> > c#-MVC模型绑定-在部分编辑期间保持值

c#-MVC模型绑定-在部分编辑期间保持值

作者:互联网

我有一个模型课,就像

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开始,所以如果我完全不了解这一点,请告诉我!

解决方法:

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

标签:razor,http-post,asp-net,c,asp-net-mvc
来源: https://codeday.me/bug/20191122/2061754.html