Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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 Mvc_Asp.net Mvc 4_Model Binding_Strongly Typed View - Fatal编程技术网

C# MVC框架如何在从控制器返回视图时将模型分配给视图?

C# MVC框架如何在从控制器返回视图时将模型分配给视图?,c#,asp.net-mvc,asp.net-mvc-4,model-binding,strongly-typed-view,C#,Asp.net Mvc,Asp.net Mvc 4,Model Binding,Strongly Typed View,这有点令人困惑。直到今天,我还知道以下在MVC中传递数据到视图的方法 ViewBag、ViewData、TempData、强类型视图及其模型。 因此,无论我们在哪里使用强类型视图,我们都会将带有数据或空对象的模型传递给视图,这样它就不会抛出任何空引用错误 但是今天我遇到了一个让我感到奇怪的行为 案例1 以下是EmployeeController的创建操作 // // GET: /Employee/Create public ActionResult Create()

这有点令人困惑。直到今天,我还知道以下在MVC中传递数据到视图的方法 ViewBag、ViewData、TempData、强类型视图及其模型。 因此,无论我们在哪里使用强类型视图,我们都会将带有数据或空对象的模型传递给视图,这样它就不会抛出任何空引用错误

但是今天我遇到了一个让我感到奇怪的行为

案例1

以下是EmployeeController的创建操作

    //
    // GET: /Employee/Create

    public ActionResult Create()
    {
        return View("Create");
    }
以下是员工文件夹或视图中的CreateView

@model EmployeeDataBase.Models.Employee




<fieldset>
    <legend>Employee</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.Name)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Name)
        @Html.ValidationMessageFor(model => model.Name)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.Email)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Email)
        @Html.ValidationMessageFor(model => model.Email)
    </div>

    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
使用以下URL调用上面的

操作中的两个Employee参数都使用名称属性值“something”进行了实例化。未在操作中返回任何内容,仍将渲染创建。如果在调试过程中动态更改名称的值,则其在“名称”文本框的“创建”视图中仍显示“某物”。

案例1:

如果您已将模型传递到视图中,它将显示该模型。如果未传递模型,则视图仅使用模型类创建控件。在本例中,它为所有属性创建标签、文本框和验证。它使用LabelFor(xxxFor)中的lambda表达式作为表达式树并分析类。它分析并查找以下内容:在模型中,您可能使用了名称属性的Display(“全名”)属性,因此它将得出结论,您希望在标签中显示“全名”,而不是“名称”。它以相同的方式创建验证javascript

因此,为了使用lambdas中给出的表达式树,它不需要模型的实例

案例2:


这一问题已经得到解决

问题1:HTMLHelper使用
@model
语句中定义的模型的
ModelMetadata
,因此模型可以
null
(但建议您始终将模型传递给视图。问题2:不清楚您的要求是什么,但GET方法通常不应将模型作为参数。您的模型有一个属性
字符串名称
,其值已添加到
模型状态
,HtmlHelpers'使用该属性生成
属性。@Ravi这样做了。)下面的答案回答您的问题?如果是,请阅读
    public ActionResult Create(Employee employee, Employee emp)
    {
        return View("Create");
    }