代码之家  ›  专栏  ›  技术社区  ›  Arthurdent510

ASP.NET MVC发布强类型传递空值?

  •  0
  • Arthurdent510  · 技术社区  · 16 年前

    当从不同的视图发回表单时,我遇到了一个问题…我使用的是相同的表单,它在一个视图中有效,但在另一个视图中无效。当它在post中出错时,参数将作为空值传递。这是我的表格:

    <% using (Html.BeginForm()) { %>
        <table>
            <tr>
                <td colspan="4" style="line-height:20px;"><label for="Search.searchString">Search</label></td>
            </tr>
            <tr>
                <td><%= Html.TextBox("Search.searchString") %>
                </td>
                <td><label for="Search.category"><nobr>In Category</nobr></label></td>
                <td><%= Html.TextBox("Search.category") %></td>
                <td><input type="submit" value="Search" /></td>
            </tr> 
          </table>   
        <% } %> 
    

    我有两种观点…索引和搜索视图。当我从索引视图发布此表单时,它工作正常。当我从搜索视图中发布它时,它告诉我我的搜索对象是空的。这是我的发帖方法:

    [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Index(Search search)
        {
            if (String.IsNullOrEmpty(search.searchString))
                search.searchString = "all";
    
            return RedirectToRoute("search", new RouteValueDictionary { { "search", search.searchString }, { "category", search.category } });
        }
    

    索引和搜索的post方法都是一样的,所以我很困惑为什么一个有效,而另一个无效。有什么想法吗?谢谢你的帮助!

    3 回复  |  直到 16 年前
        1
  •  0
  •   griegs    16 年前

    第二个视图是从搜索对象继承的还是从搜索对象继承的?

    所以你的索引视图 <namespace.SearchObject>

    你的搜索 <命名空间。SearchObject>

    如果搜索继承自 <namespace.SearchView> 然后,您的SearchView必须从SearchObject继承。

        2
  •  0
  •   Mark    16 年前

    这是因为您的actionResult方法与您传入的类型化模型同名。

    尝试使用actionname属性:

    [ActionName("Search"), AcceptVerbs(HttpVerbs.Post)]
    public ActionResult DoSearch(Search search)
    {
        return View();
    }
    
        3
  •  0
  •   Arthurdent510    16 年前

    好吧,我想我已经弄明白了……我最后把html.begininform标记修改为以下内容…

    using (Html.BeginForm("Index", "Home"))
    

    并且强制它总是使用index post方法,并且它是有效的。不过,这是解决问题的最佳方法吗?