繁体   English   中英

为什么我的ASP.NET MVC模型填充在控制器中,但视图中为Null?

[英]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的初始值为nullstring.Empty所以当返回视图时,其仍为nullstring.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM