我刚刚开始学习 .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>
}
错误
最佳答案
在 MVC 中, View 上的模型在 Controller 操作中加载,它们不会与发布操作一起回传。
如果你习惯了ASPX
的viewstate,MVC中没有这种东西,你需要在当前action中为每个view加载你需要的。
关于c# - 使用 .net MVC 为什么我的列表不能在帖子中保留下来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27314128/