2012-02-19 154 views
3

我有一个局部视图,在向数据库添加项目时需要更新。mvc部分视图ajax更新返回部分视图作为页面

的Index.cshtml:

@using (Ajax.BeginForm("Index", "WinEntry", new AjaxOptions { HttpMethod = "POST",  UpdateTargetId = "wingrid", InsertionMode = InsertionMode.Replace})) 
{ 
    @Html.Partial("_winVenue") 
    @Html.Partial("_singleWin") 
} 
<div id="wingrid"> 
    @Html.Partial("_wingrid") 
</div> 

的_singleWin具有提交按钮

控制器:

[HttpPost] 
     public ActionResult Index(Win win) 
    { 
     win.dealerId = "1234567890"; 
     win.posterid = "chris"; 
     win.posttime = DateTime.Now; 
     wem.addWin(win); 
     IEnumerable<Win> w = wem.getVenueWins(win.venue,win.windate); 
     return PartialView("_wingrid",w); 
    } 

当控制器返回局部视图_wingrid它返回它作为一个新的页面,我正在寻找的行为就像一个更新在wingrid div内的e面板。

任何帮助,将不胜感激。

+0

您有加入MicrosoftAjax。 js和MicrosoftMvcAjax.js在你想要更新的页面中? – cpoDesign 2012-02-19 14:30:02

回答

5

由于AJAX表单中的UpdateTargetId = "wingrid"选项,您似乎已经这么做了。只要确保清除了您在POST控制器操作中从模型状态中修改的值。否则,HTML辅助仍然可以使用旧值:

[HttpPost] 
public ActionResult Index(Win win) 
{ 
    ModelState.Remove("dealerId"); 
    win.dealerId = "1234567890"; 
    ModelState.Remove("posterid"); 
    win.posterid = "chris"; 
    ModelState.Remove("posttime"); 
    win.posttime = DateTime.Now; 
    wem.addWin(win); 
    IEnumerable<Win> w = wem.getVenueWins(win.venue,win.windate); 
    return PartialView("_wingrid",w); 
} 

而且不要忘了包括jquery.unobtrusive-ajax.js脚本到你的页面,如果你希望你的Ajax.*佣工的工作:

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

感谢达林,我在布局中加入了一些我整理/删除的其他脚本。当删除我删除不显眼。 – Chris 2012-02-19 16:13:33