【问题标题】:Getting posted values in MVC PartialView在 MVC PartialView 中获取发布的值
【发布时间】:2009-11-11 21:19:12
【问题描述】:

我创建了一个使用 Html.RenderPartial 渲染的 PartialView,传递了要绑定到的视图名称和强类型数据项(如下):

    <% Html.RenderPartial("SearchViewUserControl", ViewData["SearchData"]); %>

局部视图有一个包含提交按钮的表单:

<% using (Html.BeginForm("Search", "Home"))
   { %>
             ...
    <div>
        <input type="submit" value="Search" />
    </div>
<% } %>

我在控制器的操作方法(如下)中设置了一个断点,但在 searchData 中没有设置任何内容。我做错了什么?

   public ActionResult Search(SearchDomain searchData)
    {
        if (ModelState.IsValid)
        {
        }

        return View();
    }

【问题讨论】:

    标签: asp.net-mvc forms post asp.net-mvc-partialview


    【解决方案1】:

    您需要发布实际的表单元素,以便任何人知道问题所在。

    表单 html 用于设置与 SearchDomain 的绑定。你想让你的表单元素像这样命名:

    <input name="searchData.SomeProperty">
    

    让他们绑定到您的操作参数。

    【讨论】:

      【解决方案2】:

      为了从控制器方法中将 SearchDomain 对象拉出视图,您的视图必须继承自 System.Web.Mvc.ViewPage&lt;Models.SearchDomain&gt;, 或包含 SearchDomain 对象的 custom ViewModel class

      另一种方法是让您的视图继承自System.Web.Mvc.ViewPage,并使用UpdateModel 将视图数据转换为SearchDomain 对象。像这样的:

      public ActionResult Save()
      {
              SearchDomain domain = new SearchDomain ();
      
              UpdateModel(domain , new[] { "Name", "Email", "Phone", ... });
              return View(domain); 
      }
      

      【讨论】:

      • 罗伯特,我必须从 System.Web.Mvc.ViewPage 继承是有道理的,但在这种情况下,我将搜索视图实现为 UserControl,它派生来自 System.Web.Mvc.ViewUserControl。然而,action 方法位于与页面关联的控制器中。
      【解决方案3】:

      说实话,我认为RenderAction 更容易使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-11
        • 2017-04-29
        相关资源
        最近更新 更多