Asp.net mvc 4 带有MVC局部视图的Ajax.ActionLink和Ajax.BeginForm

Asp.net mvc 4 带有MVC局部视图的Ajax.ActionLink和Ajax.BeginForm,asp.net-mvc-4,ajax.beginform,Asp.net Mvc 4,Ajax.beginform,我又这么早就来了,真伤心 我正在mvc4中实现一个基于选项卡的局部视图。。我有3个选项卡,其中显示3个单独的局部视图,这些视图使用Ajax.ActionLink进行更改。每个局部视图都是表单,需要发布到同一控制器中的不同操作。ActionLink工作正常{显示并更改部分视图}。我已经使用Ajax.BeginForm提交了单独的表单,以防止完全回发。在表单提交时,将调用并执行操作,但我的挑战,我需要显示当前表单,但表单已清除,当前保留d表单内容-即重定向到相同的Partialview 下面是我的代

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

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>
}
@model MyProject.Models.Project
@使用(Ajax.BeginForm(“Projectindex”,new{ProjId=“3”}),新的AjaxOption
{
HttpMethod=“POST”,
OnBegin=“myonbegin”,
OnSuccess=“myonsuccess”,
OnComplete=“myoncomplete”,
OnFailure=“myonfailure”,
LoadingElementId=“loader”//div with.gif loader-加载数据时显示
}))
{@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
项目
@EditorFor(model=>model.ProjName)

}
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>
@Ajax.ActionLink(
“项目”//链接文本
“ProjectIndex”,//控制器内的公共方法
新选择
{
HttpMethod=“GET”,//执行HTTP Post
InsertionMode=InsertionMode.Replace,//替换内容
UpdateTargetId=“TabBody”,//目标元素ID
}
)
@Html.Partial(“\u项目”)

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

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

public PartialViewResult Projectindex(Project collection, int ProjId)
{
    //Save collection to DB.            
    var model = new Project();
    ModelState.Clear();
    return PartialView("_Project", model);
}
添加了
ModelState.Clear()
,我认为这就是真正需要的

强制html帮助程序使用更改的模型。否则,他们将使用表单submit中的值


谢谢,我试过了,但没用。。。我所观察到的是,当我重定向到另一个局部视图时,它起作用,但当我重定向到同一个局部视图时,它不起作用……。@olufikayoolowoyo请参阅更新注册<代码>ModelState.Clear()