ASP.NET MVC - 创建一个属性,但不是视图

时间:2018-02-06 16:42:01

标签: asp.net-mvc entity-framework

如果我有一个MVC模型(粗略简化)看起来像这样;

Name

但是,只有SpecialSauce来自视图。服务器端提供person.SpecialSauce = "Ketchup"; //Hard-coded for example

ModelState.IsValid

但是,在保存之前,我会检查[Required],它返回false,错误为“需要SpecialSauce字段”。

如果在服务器端提供所需的模型属性,如何使ModelState有效?我可以删除content = open('contributors.csv','r').readlines() content4set = set(content) cleanedcontent = open('contributors-cleaned.csv','w') for i, line in enumerate(content4set): cleanedcontent.write("{}.{}".format(str(i+1),line.replace('பக்கம்','அட்டவணை_பேச்சு'))) line=line.strip() print(line) 数据注释,但我希望EF数据库列不可为空。

1 个答案:

答案 0 :(得分:1)

坦率地说,不太确定您希望SpecialSauce 必需,但又不允许用户在表单上输入SpecialSauce的值,然后重写它在控制器中。

但是......如果需要SpecialSauce,这里是一个答案。

由于您在服务器端设置person.SpecialSauce,因此应在HttpGet方法中进行设置。然后将整个对象返回到View。如果您不希望用户编辑该字段,请通过HTML或jQuery禁用它。

以下是一个例子:

<强>控制器

// GET: ControllerName/Create
public ActionResult Create()
{
    var myPerson = new Person()
    {
        SpecialSauce = "Ketchup"
    };

    return View(myPerson); // assuming your view is named Create and it is expecting an object of type Person.
}

查看

@model Project.Models.Person // top of view

@Html.HiddenFor(model => model.SpecialSauce) // you can't submit disabled items to the server so create a HiddenField to hold the actual value for submission

@Html.TextBoxFor(model => model.SpecialSauce, null, new { @class = "form-control", @disabled = "disabled" }) // the textbox on page load should contain "Ketchup" and be disabled so the user can't edit the string

然后,您的ModelState将有效,然后您不必在HttpPost操作方法中设置它。

如果有帮助,请告诉我。