我有3个局部视图的视图。第一个局部视图有一个下拉列表。您从下拉列表中选择了某些内容,然后第二个局部视图将在同一页面上的正下方加载。
然后我在第二个局部视图中有一个搜索表单(html.BeginForm),当我提交表单时,我想在第二个部分视图下打开第三个局部视图。
第3个局部视图有一个带模型的剑道ui网格。
现在的问题是第三个局部视图会在另一个页面上呈现。
查看:
<section>
<div id="searchpanel">
@html.Partial("_1stPartial")
<div id="2ndPartialDiv"></div>
<div id="3rdPartialDiv"></div>
</div>
</section>
部分View2:
<section>
<div id="searchblock">
<table>
<tr>
<td>
@using (Ajax.BeginForm("Search", "ControllerName", new AjaxOptions { updateTargetId = "3rdPartialDiv"}))
<fieldset>
<ol>
<li></li>
<li>
<input type="submit" value="Search" id="btnSearch"/>
</li>
</ol>
</fieldset>
</td>
</tr>
</table>
</div>
</section>
控制器:
public ActionResult Search(model)
{
//fill searchresults
return PartialView("_3rdPartial", searchresults);
}
答案 0 :(得分:2)
Html.BeginForm将执行整页发布。我相信你所追求的是Ajax.BeginForm。
http://msdn.microsoft.com/en-us/library/system.web.mvc.ajax.ajaxextensions.beginform(v=vs.118).aspx
示例:
@using (Ajax.BeginForm("TheActionResultYouWantToInvokeThatWillReturnTheThirdView", "YourController", null, new AjaxOptions { UpdateTargetId = "theIdOfTheDivForTheThirdView", OnSuccess = "doFunctionIfYouNeedTo", OnFailure = "ShowPopUpErrorIfYouWant" }))
{
}
邮政编码添加编辑:
此标记无效,可能是UpdateTargetId未找到Div。
的原因<section>
<div id="searchpanel">
@html.Partial("_1stPartial")
<div id="2ndPartialDiv"></div>
<div id="3rdPartialDiv"></div>
</div>
</section>
请参阅关闭属性上的语音标记。
答案 1 :(得分:2)
我从您那里了解到的问题是,您是从第一个PartialView
提交的,如果成功,则会显示第二个。{1}}这个也一样。如果从第二个POST
成功PartialView
,则您需要显示第三个Ajax
。
为什么不在客户端使用 $.ajax ({
type:'POST'
data: {},
success: function(response){
$('.specific_div_container_for_previous_partial').hide();
$('.specific_div_container_for_partial').html(response.Html);
$('.specific_div_container_for_partial').show();
},
error: function(){
// whatever
}
});
进行此操作?
PartialView
在服务器端,您将使用PartialView
返回呈现的html。要在variable
中呈现{{1}}并将其作为json对象发送到客户端,请查看THIS
更新 - 如何在jquery中序列化表单:
请关注THIS