2010-10-13 102 views
0

我在我的母版页上有一个控件,使用RenderAction创建。我遇到的问题是当我在页面上的其他地方使用表单时,它使用HttpPost而不是HttpGet来呈现此操作。RenderAction使用多种形式

我得到了为什么它这样做,因为请求是一个帖子,但是这不是所期望的或预期的结果,因为该控件并未涉及用户操作。

简单的例子:

<div id="search-panel"> 
    <% Html.RenderAction("Index", "TestController"); %> 
</div> 
<% using (Html.BeginForm("Update", "Products") 
{%> 
    <%: Html.Hidden("productId", Model.ProductId) %> 
    <%: Html.TextBoxFor(model => Model.Name)%> 
    <input type="submit" vaue="Submit"/>    
<% }%> 

当用户提交更新产品形成,如果它是在提交的TestController指数的形式也变为。这使控制RenderAction有些无用。

任何有关解决方法或更好方法的想法都是非常受欢迎的。

干杯

UPDATE

我不希望使用的RenderPartial的建议,原因如下。在这种情况下,控件是一个搜索框,其中包含从数据库填充的许多选项。这个控制/视图的逻辑应该在SearchController中。

该页面的主要区域可以包含其他控制器的视图,例如,产品视图。要使用RenderPartial,ProductController必须为搜索框创建视图数据。这不是工作,ProductController甚至不知道“搜索”功能是否存在。

我找到了一个解决方案,使用this blog post。这也解释了我很好的问题。 MVC错过了这个功能似乎很奇怪。

回答

2

您有使用RenderAction而不是RenderPartial的原因吗? RenderAction使用POST,RenderPartial使用GET。

+0

目前MasterPage没有渲染控件使用的模型,所以我不能将它传递给PartialView。我可以重新组织一些东西,这样我的ViewModel就可以从一个基本的ViewModel继承,这个基础ViewModel包含了我想的主页面数据。不知道我会在哪里处理这些数据,但控制器RenderPartial sidesteps是这个的合理位置。将不得不考虑一下。 – Magpie 2010-10-13 21:28:23