[英]Why does this value in my model return null when used in my controller? (ASP.NET MVC)
[英]Why Is My ASP.NET MVC Model Filled in the Controller, but Null in the View?
我确实有个愚蠢的问题。
我有一个ASP.NET MVC页面,该页面绝对拒绝显示我的视图模型。 即使我删除了分配给viewmodel的数据库结果,并且只是在控制器内部的viewmodel属性中硬编码了我想要的值,它仍然不起作用。 在调试过程中,我可以看到正确的数据是从控制器内部放入ViewModel内的,但是View就像永远无法获取数据一样。 使用quickwatch,我可以看到数据在字段内部。
它会在LabelFors中显示它正在使用的变量的名称,但是永远不会在文本框中显示该变量的值。
视图
@model Project1.ViewModels.OrderNoLocationViewModel
@{ Html.EnableClientValidation(); }
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<table class="item-display" style="width: 100%;">
<tr>
<td class="label">
<div class="editor-label">@Html.LabelFor(model => model.Shipper):</div>
</td>
<td class="value">
<div class="editor-field">
@Html.TextBoxFor(model => model.Shipper)
@Html.ValidationMessageFor(model => model.Shipper)
</div>
</td>
</table>
}
调节器
[HttpPost]
[ValidateAntiForgeryToken()]
public ActionResult Index(OrderNoLocationViewModel model, string consigneeFilter, string orderNoFilter, string button)
{
model = new OrderNoLocationViewModel()
{
Shipper = "Ray"
};
return View(model);
}
我不知道发生了什么...我还有其他工作页面,而这实际上是唯一这样工作的页面。
请帮忙! :(
编辑:
路线
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
目前尚不清楚您要在这里做什么或为什么要这样做。 如果要显示一个表单来编辑OrderNoLocationViewModel
的属性,则首先使用GET方法显示它
public ActionResult Index()
{
var model = model = new OrderNoLocationViewModel();
model.Shipper = "Ray";
return View(model);
}
现在,文本框将显示“ Ray”。
当您发回到
[HttpPost]
public ActionResult Index(OrderNoLocationViewModel model)
{
}
model.Shipper
将包含文本框中任何值(如果用户未更改该值,则为“ Ray” )。
按照在POST方法中所做的那样重新分配模型
model = new OrderNoLocationViewModel()
{
Shipper = "Ray"
};
return View(model);
除非您清除ModelState
(视图从ModelState
取值),否则没有任何影响。 我假设在您的情况下Shipper
的初始值为null
或string.Empty
所以当返回视图时,其仍为null
或string.Empty
要查看此工作,请将POST方法修改为
[HttpPost]
public ActionResult Index(OrderNoLocationViewModel model)
{
ModelState.Clear();
model.Shipper = "Some other value";
return View(model);
}
文本框现在将包含“某些其他值” 。 但这不是您真正想要做的事情,因为清除ModelState
也会同时删除所有验证错误
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.