Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC模型绑定-在部分编辑期间维护值_C#_Asp.net_Asp.net Mvc_Razor_Http Post - Fatal编程技术网

C# MVC模型绑定-在部分编辑期间维护值

C# MVC模型绑定-在部分编辑期间维护值,c#,asp.net,asp.net-mvc,razor,http-post,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;} } 我想要一个可以编辑EditableProp1但显示StaticProp1,StaticProp2但不可编辑的视图 我创建了一个强类型视图: @model Mod @using (H

我有一个模型课

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" />
}
如果我出于某种原因发回,这会导致一个问题,因为staticProp1现在将为null,视图将无法显示它

我知道我可以补充

@Html.HiddenFor(m => m.StaticProp1)
@Html.HiddenFor(m => m.StaticProp2)
在我看来,这将很好,但我想知道是否有其他更好的方法

我的值已在表单上(
@Model.StaticProp1

)。有没有办法将模型绑定到不可编辑的标记上?有这样的HTML助手吗


顺便说一句,如果不是很明显,我只是从MVC开始,所以如果我完全没有抓住要点,请让我知道

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

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

DefaultModelBinder  

如果
StaticProp
来自数据库或其他地方,您可以再次读取它们,并在回发方法中设置模型数据。为什么要避免HiddenFor?这是它的一个常见用例。我想避免它,因为其中有很多(我的模型比我在这里展示的更复杂)。只是感觉他们把视图弄得乱七八糟,既然这些值已经在表单上了,我想也许还有别的方法。类似@Html.LiteralFor(…)的东西您可以将@Html.TextBoxFor与自定义css类(删除文本框装饰)和readonly属性一起使用,这样它就无法更新或创建您自己的帮助程序,从而使其更干净。我相信禁用的属性将导致字段无法发布,这是当前他的问题。readonly属性就是他想要的。这很有道理,我认为
readonly
属性确实是一个不错的选择。我添加了一个相关的问题。谢谢,这些方法很好用。我只是想确保我没有遗漏任何明显的事实。
DefaultModelBinder