2012-11-14 49 views
0

我是新來的MVC 4和剃刀引擎 - 所以這可能是一個愚蠢的問題。MVC 4(剃刀) - 控制器正在返回partialview,但整個頁面正在更新

我想要實現的是我有一個頁面,下拉列表和一個按鈕。點擊按鈕調用控制器傳遞選定的值。控制器應該返回一個局部視圖,只有頁面的底部應該被更新。

但是我發現整個頁面被部分視圖html替換。 IE瀏覽器。我得到我的結果列表顯示,但我失去了我的項目下拉列表並提交按鈕。我試圖包括jQuery和不顯眼的腳本(我認爲我不需要在MVC 4中)的引用,但是根本不會改變頁面(即下拉列表和按鈕停留在那裏,並且不顯示任何結果)。我查看

部分:

@using (Ajax.BeginForm("GetProjectStories", "MyController", new AjaxOptions{ UpdateTargetId = "projectUserStories"})) 
{ 

    <fieldset> 
     <legend>Select Project</legend> 
     <div> 
      @Html.DropDownList("ProjectReference", (IEnumerable<SelectListItem>)Model.ProjectList) 
     </div> 
     <p> 
     <input name="GetStoriesButton" type="submit" value="Get Stories" /> 
     </p> 
    </fieldset> 
} 

@if (Model != null && Model.UserStories != null) 
{ 
    <div id="projectUserStories"> 
     @{Html.RenderPartial("_UserStoryList", Model);} 
    </div> 

} 

我的控制器:

public ActionResult GetProjectStories(ProjectViewModel model) 
     { 

      var stories = MyService.GetProjectUserStories(model.ProjectReference).Results; 
      model.UserStories = stories; 
      return PartialView("_UserStoryList", model); 
     } 

我的部分觀點的內容只包含一個HTML表格和參考模型。

回答

1

所以,我想包括不顯眼的腳本,和固定我不渲染DIV該對象是否爲空,但它仍然是不工作的事實。

所以我切換到使用jquery。

<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script> 

    <script type="text/javascript"> 
      $(function() { 
       $('form').submit(function() { 
        var url = "@Url.Action("GetProjectStories", "MyController")"; 
        var data = { selectedProject: $('#ProjectReference').val() }; 

        $("#projectUserStories").load(url, data, function() { 
        }); 
        return false; 
       }); 
      }); 

    </script> 

     @using (Html.BeginForm()) 
     { 
      <fieldset> 
       <legend>Select Project</legend> 
       <div> 
        @Html.DropDownList("ProjectReference", (IEnumerable<SelectListItem>) Model.ProjectList) 
       </div> 
       <p> 
        <input name="GetStoriesButton" type="submit" value="Get Stories" /> 
       </p> 
      </fieldset> 

      <div id="projectUserStories"> 
       @{ Html.RenderPartial("_UserStoryList", Model); } 
      </div> 
     } 
1

你如何計劃更新projectUserStories,如果代碼塊不能被渲染的,試試這個:

<div id="projectUserStories"> 
@if (Model != null && Model.UserStories != null) 
{ 
    Html.RenderPartial("_UserStoryList", Model); 
} 
</div> 

還要檢查所有必需的js文件的Microsoft Ajax的幫手,比如這個:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 

也要看:

  1. Using Ajax.BeginForm with ASP.NET MVC 3 Razor
  2. MVC 3 - Ajax.BeginForm does a full post back
+0

是啊,注意到今天早上 - 謝謝。將檢查出你的鏈接:) – Jen