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

时间:2014-10-16 21:27:43

标签: c# asp.net-mvc asp.net-mvc-4

我真的愚蠢的问题正在发生。

我有一个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
            );
        }

1 个答案:

答案 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的初始值为nullstring.Empty,因此当返回视图时,其仍为nullstring.Empty要查看此内容工作,修改POST方法

[HttpPost]
public ActionResult Index(OrderNoLocationViewModel model)
{
  ModelState.Clear();
  model.Shipper = "Some other value";
  return View(model);
}

文本框现在将包含“其他一些值”。 但是,这不是您真正想要做的事情,因为清除ModelState也会删除所有验证错误