我真的愚蠢的问题正在发生。
我有一个ASP.NET MVC页面绝对拒绝显示我的viewmodel。即使我删除了分配给viewmodel的数据库结果,只是在控制器内的viewmodel属性中硬编码我想要的值,它仍然不起作用。在调试过程中,我可以看到正确的数据从控制器内部放置在ViewModel内部,但View的行为似乎从未得到它。使用快速表,我可以看到数据在场内。
它将显示它在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
);
}
答案 0 :(得分:1)
你在这里尝试做什么或为什么这样做是不完全清楚的。如果要显示表单以编辑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
也会删除所有验证错误