C# 为什么我的MVC viewModel为空?

C# 为什么我的MVC viewModel为空?,c#,asp.net-mvc,asp.net-mvc-2,C#,Asp.net Mvc,Asp.net Mvc 2,我正在尝试将viewModel传递给编辑表单视图。问题是我实例化了模型并为其赋值,但模型仍然为空 我的行动: public ActionResult OrderEdit(takeOrder FormInput) { takeOrder viewModel = new takeOrder { Name= "anonymous", TableNumber = 13, FoodIte

我正在尝试将viewModel传递给编辑表单视图。问题是我实例化了模型并为其赋值,但模型仍然为空

我的行动:

    public ActionResult OrderEdit(takeOrder FormInput)
    {
        takeOrder viewModel = new takeOrder
        {
            Name= "anonymous",
            TableNumber = 13,
            FoodItems = new List<FoodItem> {
                new FoodItem{ DishName = "Dishname value 1", Price = 10 },
                new FoodItem{ DishName = "Dishname value 2", Price = 20 },
                new FoodItem{ DishName = "Dishname value 3", Price = 30 },
                new FoodItem{ DishName = "Dishname value 4", Price = 40 },
            }
        };
        if (FormInput != null)
            viewModel = FormInput;

        return View(viewModel);
    }
然后代码按预期执行。但我不明白,当我特别检查对象是否为null时,为什么会分配
null
对象。预期的行为是,如果表单已提交,则为
viewModel
分配编辑值,如果没有表单提交后,则
viewModel
使用默认值。最终,这些默认值将来自db


为什么
if(FormInput!=null)
FormInput
为null时返回true?

FormInput参数的值是多少?你怎么称呼这次行动?我的猜测是FormInput中有一些内容,并且不是空的,因此

如果(FormInput!=null) viewModel=FormInput


执行后,将清除上面在viewModel中放置的任何内容。

FormInput参数的值是多少?你怎么称呼这次行动?我的猜测是FormInput中有一些内容,并且不是空的,因此

如果(FormInput!=null) viewModel=FormInput


执行,然后将您在上面的viewModel中放入的任何内容吹走。

您在页面标题中有以下内容。。。您的viewmodel类是否明确命名为“takeOrder”

Inherits=“System.Web.Mvc.ViewPage
编辑
我刚刚重读了你的帖子,它是你的模型名…首先要重命名为TakeOrder,你的页面标题下面有这个名字…你的viewmodel类是否明确命名为“TakeOrder”

Inherits=“System.Web.Mvc.ViewPage
编辑
我刚刚重读了你的帖子,它是你的模特名。。。第一件事是重命名为TakeOrder,不确定是否注意到了这一点,但根据该错误,您的模型实际上不是空的<代码>参数异常。如果模型为空,则为
NullReferenceException


ArgumentNullException
表示
Model.FoodItems
集合在传递给
Count()
扩展方法时为空。

不确定是否注意到了这一点,但根据该错误,您的模型实际上不是空的<代码>参数异常。如果模型为空,则为
NullReferenceException


ArgumentNullException
意味着
Model.FoodItems
集合在传递给
Count()
扩展方法时为空。

我无法更强烈地建议您更改编码样式。从字面上看,它与标准样式(使用驼峰大小写的类名和大写参数名)完全相反。(应该是另一种方式)就错误本身而言,您对每个参数都进行硬编码,但是如果(FormInput!=null)viewModel=FormInput,则继续使用
if(FormInput!=null)覆盖该工作。大概
FormInput
不是空的,但是里面的所有属性都是空的。这是回发的结果吗?你为什么希望
FormInput
有有效的数据?@Kirk-Woll-我不知道有这样的约定,尤其是@Kirk-Woll-谢谢你的资源!我得养成一些新习惯。我极力主张你改变编码风格。从字面上看,它与标准样式(使用驼峰大小写的类名和大写参数名)完全相反。(应该是另一种方式)就错误本身而言,您对每个参数都进行硬编码,但是如果(FormInput!=null)viewModel=FormInput,则继续使用
if(FormInput!=null)覆盖该工作。大概
FormInput
不是空的,但是里面的所有属性都是空的。这是回发的结果吗?你为什么希望
FormInput
有有效的数据?@Kirk-Woll-我不知道有这样的约定,尤其是@Kirk-Woll-谢谢你的资源!我得养成一些新习惯。谢谢你的回答。我注释掉了if语句,它按预期工作。但是,这对我来说没有意义,因为只有当
FormInput
不为空时,才应该分配
viewModel=FormInput
。因此,if语句表示
FormInput
不是null,但赋值认为
FormInput
是null。我一定是遗漏了什么。谢谢你的回答。我注释掉了if语句,它按预期工作。但是,这对我来说没有意义,因为只有当
FormInput
不为空时,才应该分配
viewModel=FormInput
。因此,if语句表示
FormInput
不是null,但赋值认为
FormInput
是null。我肯定遗漏了什么。谢谢马特,@Kirk-Woll还指出了我在命名对象和参数时缺乏约定。谢谢马特,@Kirk-Woll还指出了我在命名对象和参数时缺乏约定。我没有注意到这一点。谢谢,我没注意到。谢谢
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/genesis.Master" Inherits="System.Web.Mvc.ViewPage<Genesis_0_02.Models.takeOrder>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    OrderEdit
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
            <h2>OrderEdit</h2>
    <% using (Html.BeginForm())
       { %>
        <%: Html.ValidationSummary() %>
        <p>
            <%: Html.LabelFor(x => x.Name) %><br />
            <%: Html.TextBoxFor(x => x.Name) %>
        </p>
        <p>
            <%: Html.LabelFor(x => x.TableNumber) %><br />
            <%: Html.TextBoxFor(x => x.TableNumber) %>
        </p>
        <button type="button" id="AddListItem">Add a dish to your order</button>
        <br />
        <% for (int i = 0; i < Model.FoodItems.Count(); i++ )%>
        <% { %>
        <div class="ListItem">
        <button type="button" class="RemoveListItem">X</button>
            Dish: <%: Html.TextBoxFor(x => x.FoodItems[i].DishName, new { style = "width:60px;" } )%>
            Price: <%: Html.TextBoxFor(x => x.FoodItems[i].Price, new { style = "width:60px;" })%>
        </div>
        <% } %>
        <br />
<button type="submit">Submit Order</button>

    <% } %>

</asp:Content>
Exception Details: System.ArgumentNullException: Value cannot be null.
Parameter name: source

Source Error: 


Line 64:         <button type="button" id="AddListItem">Add a dish to your order</button>
Line 65:         <br />
--> error --> Line 66:         <% for (int i = 0; i < Model.FoodItems.Count(); i++ )%>
Line 67:         <% { %>
Line 68:         <div class="ListItem">


Source File: pathtotheproject\Genesis.0.02\Genesis.0.02\Views\Admin\OrderEdit.aspx    Line: 66 
        // if (FormInput != null)
        //    viewModel = FormInput;
Inherits="System.Web.Mvc.ViewPage<Genesis_0_02.Models.takeOrder>