2

我想单击“主视图”上的按钮并以自己的 . 更新

我有一个主要观点:

 @{
using (Ajax.BeginForm("PastClaims", "Claim", FormMethod.Post, new AjaxOptions { UpdateTargetId = "update_panel", InsertionMode = InsertionMode.Replace }, new { @class = "form-horizontal" }))
{
    <legend>Submit a Claim</legend>
    @Html.EditorForModel()
    <div class="controls">
        <input id="btnCheckForClaims" type="submit" class="btn btn-primary" value="Submit Claim" />
    </div>


    }

我需要单击提交按钮,然后显示另一个视图:如果我在下面这样做,那么在初始加载的页面上它会显示 div

 <div id="update_panel">@Html.Partial("PastClaims")</div>

如果我将 div 留空,那么我会得到一个新的局部视图。

  <div id="update_panel"></div>

如果我像 darrin 建议的那样让它们为空:

using (Ajax.BeginForm("PastClaims", "Claim", FormMethod.Post, new AjaxOptions { UpdateTargetId = "update_panel", InsertionMode = InsertionMode.Replace }, new { @class = "form-horizontal" }))

我被重定向到同一页面(我想要的),但未显示额外的部分视图。

感谢下面的 Darrin 让我走到这一步。

4

2 回答 2

5

Ajax.BeginForm在这种情况下,您可以使用 an :

@using (Ajax.BeginForm(null, null, new AjaxOptions { UpdateTargetId = "update_panel", InsertionMode = InsertionMode.Replace }, new { @class = "form-horizontal"}))
{
    @Html.EditorForModel()
    <div class="controls">
        <input id="btnOpenPartialView" type="submit" class="btn btn-primary" value="OpenPartialView" />
    </div>
}

<div id="update_panel">
    @Html.Partial("PartialView")
</div>

然后相应的控制器动作将返回部分视图:

[HttpPost]
public ActionResult SomeAction() 
{
    // some processing ...
    return PartialView("PartialView");
}

为了Ajax.*帮助工作人员不要忘记包含jquery.unobtrusive-ajax.js脚本:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
于 2012-09-21T15:22:50.347 回答
0

@Html.Partial是服务器代码,如果你想在提交后加载部分,那么试试这个:

$("form").on('submit', function(event){
    event.preventDefault();
    var form = $(this);

    $.ajax({
       url: form.attr('action'),
       type: form.attr('method'),
       data: form.serialize(),
       success: function(r) {
           $('#update_panel').html(r);
       }
    });
});
于 2012-09-21T15:25:12.290 回答