具有MVC部分视图的Ajax.ActionLink和Ajax.BeginForm

时间:2015-04-04 19:53:13

标签: asp.net-mvc-4 ajax.beginform

我在这里这么早。伤心 我在mvc4中实现了一个基于选项卡的局部视图。我有3个选项卡,显示3个单独的部分视图,使用Ajax.ActionLink进行更改。每个部分视图都是需要发布到同一控制器内的不同操作的表单。 ActionLinks正常工作{部分视图显示和更改}。我使用Ajax.BeginForm提交单个表单,以防止完全回发。在表单提交上,操作被调用并实现但是我的挑战,我需要显示当前表单但是表单已清除,当前表单内容保留 - 即重定向到相同的部分视图 以下是我的代码

Project Controller.cs的ProjectIndex操作

[HttpPost]
        public PartialViewResult Projectindex(Project collection, int ProjId)
        {
            //Save collection to DB.            

            return PartialView("_Project");
        }

_Project.cshtml ..部分视图

@model MyProject.Models.Project

<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

@using (Ajax.BeginForm("Projectindex", new { ProjId = "3" }, new AjaxOptions
{

    HttpMethod = "POST",
      OnBegin = "myonbegin",
    OnSuccess = "myonsuccess",
    OnComplete = "myoncomplete",
    OnFailure = "myonfailure",
    LoadingElementId = "loader" // div with .gif loader - that is shown when data are loading
}))

{   @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Project</legend>

        <div class="editor-label">
            @Html.EditorFor(model => model.ProjName)
        </div>


        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

Project.cshtml主视图

@Ajax.ActionLink(
"Project",            //Link Text
"ProjectIndex",       //Public Method inside our Controller
new AjaxOptions
{
    HttpMethod = "GET",     //Do a HTTP Post
    InsertionMode = InsertionMode.Replace,  //Replace content
    UpdateTargetId = "TabBody",    //Target element ID
}
)

<div id="TabBody">
    @Html.Partial("_Project")
</div>

唯一的挑战是表单没有被清除,给我的印象是视图没有呈现..我尝试添加一个OnSuccess和OnFailure选项,但没有被解雇..有人能指出我正确的方向。提前致谢

1 个答案:

答案 0 :(得分:1)

我只会将一个空模型发回部分:

public PartialViewResult Projectindex(Project collection, int ProjId)
{
    //Save collection to DB.            
    var model = new Project();
    ModelState.Clear();
    return PartialView("_Project", model);
}

添加了ModelState.Clear(),我认为这就是所有需要的。

  

强制html帮助程序使用您更改的模型。否则,他们使用表单提交

中的值