Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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_Html.dropdownlistfor - Fatal编程技术网

C# 回发时MVC列表为空

C# 回发时MVC列表为空,c#,asp.net-mvc,html.dropdownlistfor,C#,Asp.net Mvc,Html.dropdownlistfor,我的控制器用一个列表填充我的模型,该列表包含出现在我视图中的下拉列表中的字符串。当视图发布回我的控制器时,该列表突然null。为什么它是空的,我创建的字符串列表发生了什么 列表已正确填充并显示在视图中。表单元素的其余部分可以正确地回发。例如,selectedName具有用户单击的任何名称。唯一没有发回的是姓名列表 这是我模型的相关部分 public class MyModel { [Display(Name = "Selected")] public string selecte

我的控制器用一个列表填充我的模型,该列表包含出现在我视图中的
下拉列表中的
字符串。当视图发布回我的控制器时,该列表突然null。为什么它是空的,我创建的字符串列表发生了什么

列表已正确填充并显示在视图中。表单元素的其余部分可以正确地回发。例如,
selectedName
具有用户单击的任何名称。唯一没有发回的是
姓名列表

这是我模型的相关部分

public class MyModel
{
    [Display(Name = "Selected")]
    public string selectedName{ get; set; }
    [Display(Name = "Names")]
    public List<string> nameList{ get; set; }
}
公共类MyModel
{
[显示(Name=“选定”)]
公共字符串selectedName{get;set;}
[显示(Name=“Name”)]
公共列表名称列表{get;set;}
}
我的控制器的相关Get和Post部分

public class MyController: Controller
{
    [HttpGet]
    public ActionResult Index()
    {
        List<string> nameList= getNames();
        MyModel model = new MyModel()
        model.nameList= nameList;
        // Now, model.nameList has a bunch of stuff in it
        return View(model); 
    }

    [HttpPost]
    public ActionResult Index(MyModel model)
    {
        if(model.nameList== null)
        {
            cry();
            postOnStackOverflow();
        }
        return View(model); 
    }
}
公共类MyController:Controller
{
[HttpGet]
公共行动结果索引()
{
List nameList=getNames();
MyModel模型=新的MyModel()
model.nameList=名称列表;
//现在,model.nameList里面有很多东西
返回视图(模型);
}
[HttpPost]
公共行动结果索引(MyModel)
{
if(model.nameList==null)
{
哭();
postOnStackOverflow();
}
返回视图(模型);
}
}
以及我的观点的相关部分(封装在表单中)


@Html.LabelFor(c=>c.nameList):
@DropDownListFor(c=>c.selectedName,new SelectList(Model.nameList),new{onchange=“this.form.submit();”})


发布表单时,仅发布下拉列表的值。我假设你的控制权在表格上

我不确定您为什么希望始终返回到您发布的视图,但您需要重新填充列表:

    [HttpPost]
    public ActionResult Index(MyModel model)
    {
         List<string> names = getNames();

        model.nameList = names;
        return View(model); 
    }
[HttpPost]
公共行动结果索引(MyModel)
{
列表名称=getNames();
model.nameList=名称;
返回视图(模型);
}

考虑到您的观点,这是预期的行为。如果要再次将模型返回到同一视图,则需要重新加载“名称列表”集合属性

[HttpPost]
public ActionResult Index(MyModel model)
{
   if(ModelState.IsValid)
   {
     // Save and redirect
   }
   //reload the collection again and return the model to the view
   model.nameList=getNames();
   return View(model); 
}

我在您的中找不到
names
属性model@Selman22对不起,那是个打字错误。我更改了很多变量名,以符合我的工作策略。现在更正它。另一种方法是让名字列表成为模型的成员。那么就不需要记得重新填充它了。它已经是一个成员了,但是它没有被发回,因为它不在表单上的任何控件的值中。我不清楚-抱歉-我的意思是让构建列表的方法成为模型的成员,让模型自己构建列表,或者在列表的getter中,或者在构造器或其他东西中。这不是模型绑定的工作方式。列表必须是作为表单一部分的控件的值,否则它就不是post的一部分。如果不创建自定义模型绑定器,就没有好的方法可以做到这一点,不。在每次回发上重建整个列表似乎效率不高。我从XML文件中读取我的姓名列表,这很昂贵。我已经构建了一次列表,我希望避免再次构建它。我的问题是“我已经创建的名称列表怎么了?”除非它不是存储在表单元素中,否则它将不可用。您可以缓存从XML文件读取的数据,并使用该数据重新加载。
[HttpPost]
public ActionResult Index(MyModel model)
{
   if(ModelState.IsValid)
   {
     // Save and redirect
   }
   //reload the collection again and return the model to the view
   model.nameList=getNames();
   return View(model); 
}