2016-08-02 97 views
0

我張貼,並試圖重新加載與使用Ajax這樣的新數據的局部視圖:控制器返回PartialView覆蓋整個查看

Index.cshtml

<div id="left-column"> 
    @Html.Partial("~/Views/Project/_ProjectList.cshtml", Model.ProjectList) 
</div> 

〜/查看/項目/ _ProjectList.cshtml

@using (Ajax.BeginForm("Create", "Project", new AjaxOptions 
{ 
    HttpMethod = "POST", 
    UpdateTargetId = "left-column" 
})) 
{ 
    <h3>Create a new project</h3> 
    <div class="form-group"> 
     <label for="new-project-name">Name</label> 
     <input type="text" class="form-control" id="new-project-name" name="Name" placeholder="Example" /> 
    </div> 

    <button type="submit" class="btn btn-primary">Create Project</button> 
    <a href="#" id="create-project-cancel" rel="modal:close">Cancel</a> 
} 

然後我控制器後,一些返回PartialView DB工作:

[HttpPost] 
public PartialViewResult Create(Project newProject) 
{ 
    db.Projects.Add(newProject); 
    db.SaveChanges(); 

    var projectList = db.ProjectLists.SingleOrDefault(pl => pl.Id == 1); 

    return PartialView("~/Views/Project/_ProjectList.cshtml", projectList); 
} 

我期望_ProjectList局部視圖加載到#左列元素與新projectList通過由控制器,而是整個視圖被覆蓋,所以整個身體新HTML源代碼基本上是這樣的:

<body> 
    <!-- all the stuff from the _ProjectList partial --> 
</body> 

值得一提的是,局部視圖返回後,讀取網址/項目/創建,這是我不希望。

我已經包含了jquery-validate和jquery-validate-unobtrusive,並且控制檯沒有顯示任何錯誤,所以不應該是問題。

任何想法是怎麼回事?

+1

http://stackoverflow.com/a/15282510/1907 - jQuery版本問題瓦特/不顯眼? –

+0

是的,我正在使用jQuery 3.1.0,所以看起來不顯眼不起作用。 – jrsowles

回答

0

Benjy在上面的評論中得到了它。這是一個jQuery版本問題。我正在運行3.1.0,並且jquery.unobtrusive-ajax停止使用jQuery版本1.9。

1

當使用Ajax.BeginForm輔助方法來執行ajax表單發佈時,您還需要包含jquery.unobtrusive-ajax.js文件。該文件具有處理提交按鈕單擊事件並異步發送表單的代碼,而不是進行常規表單提交。

如果您不包含此文件,表單提交將是正常的。我的猜測是你錯過了包含這個文件,因此錯過了Ajax化表單提交經驗。

所以一定要確保jQuery的

@Scripts.Render("~/bundles/jquery") 
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script> 

Here後加載該文件,如果你想通過添加NuGet包管理器這個文件的NuGet頁面的鏈接。