c# - 使用 .net MVC 为什么我的列表不能在帖子中保留下来?

标签 c# .net asp.net-mvc http

我刚刚开始学习 .net MVC,但遇到了一些我无法解决的问题。我显然缺少一些基本原则,但希望得到一些帮助。

我有一个带有两个 IEnumerable 的 ViewModel,我想用它来创建下拉列表。我的 GET 工作正常,列表按预期填充。

现在我将 ViewModel 发回 POST 方法,不是为了做任何有用的事情,而是为了尝试理解 mvc 的工作原理。我希望我能够简单地从回发的模型中重新填充 dropdownlistfors - 但我得到了空引用异常。

ViewModel 中的其他值(例如 partyid)在 POST 后仍然存在,所以我很困惑。

如果我重新填充列表,我可以让它工作,但这似乎是错误的。

有人可以指点一下吗?

我的 View 模型

public class DemoViewModel
{
    //properties
    public IEnumerable<tbl_server_lookup> servers { get; set; }
    public int serverId { get; set; }

    public IEnumerable<tbl_site_lookup> sites { get; set; }
    public int siteId { get; set; }

    public int partyid { get; set; } 

    public string message { get; set; }

    public DemoViewModel()
    {

    }

}

我的 Controller

// GET: /Demos/Test/
[HttpGet]
public ActionResult Test()
{

DemoViewModel demo = new DemoViewModel();

using (var dbContext = new ADAPI.Models.db_ad_apiEntities2())
{
    var serverList = dbContext.tbl_server_lookup.Where(s => s.server_name != null);
    demo.servers = serverList.ToList();
    var siteList = dbContext.tbl_site_lookup.Where(w => w.site_name != null);
    demo.sites = siteList.ToList();
}
demo.message = "Enter the user id you would like to look up in the box below.";

return View(demo);
}

//
//POST: /Demos/Test/
[HttpPost]
[ValidateAntiForgeryToken] 
public ActionResult Test(DemoViewModel demo)
{

//It works if I uncomment this block...
/*using (var dbContext = new ADAPI.Models.db_ad_apiEntities2())
{
    var myQuery = dbContext.tbl_server_lookup.Where(s => s.server_name != null);
    demo.servers = myQuery.ToList();
    var siteList = dbContext.tbl_site_lookup.Where(w => w.site_name != null);
    demo.sites = siteList.ToList();

}*/

demo.message = "the user id you posted is: " + demo.partyid + ". The Server you selected is: ";// +demo.serverId;
return View(demo);

}

我的看法

@model ADAPI.ViewModels.DemoViewModel


<h2>Demos</h2>
<h3>@Model.message</h3>

@using (Html.BeginForm("Test","Demos"))
{
@Html.AntiForgeryToken()
<div class="">
<h4>Party ID</h4>
@Html.ValidationSummary(true)
<!-- input box for party id-->

@Html.TextBoxFor(model => model.partyid)



<!-- dropdown list of server types eg live vs test-->
@Html.DropDownListFor(model => model.serverId, new SelectList(Model.servers, "server_Id","server_name"))
@Html.DropDownListFor(model => model.siteId, new SelectList(Model.sites, "site_short_name","site_name"))



<input type="submit" value="Try" />

</div>
}

错误 The exception

最佳答案

在 MVC 中, View 上的模型在 Controller 操作中加载,它们不会与发布操作一起回传

如果你习惯了ASPX的viewstate,MVC中没有这种东西,你需要在当前action中为每个view加载你需要的。

关于c# - 使用 .net MVC 为什么我的列表不能在帖子中保留下来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27314128/

相关文章:

c# - Regex.Replace 中的 MatchEvaluator 如何工作?

c# - 使用 XmlNode.selectSingleNode 选择一个节点

.net - .NET中的反射有什么用?

c# - 使用ajax更改div文本不起作用

asp.net-mvc - 如何在 ASP.NET MVC 应用程序中设置一个 Controller 操作的请求超时

c# - UWP MapControl MapPolygon 描边设置不正确

c# - 当类的属性成员不是原始类型时,如何实例化一个类?

c# - 从子类提供抽象类成员变量

asp.net-mvc - 由于基于角色的 [Authorize] 属性,ASP.NET MVC 5 Azure 网站无法在某些 View 上连接到 SQL Azure DB

c# - 如何将 C# 对象列表转换为 Protocol Buffer 列表?