Ajax.BeginForm没有更新目标div

时间:2012-03-07 11:30:39

标签: asp.net-mvc-3 asp.net-ajax

控制器:

public ActionResult Edit(string temp)
{
     ViewBag.Time = DateTime.Now.ToString("hh:mm:ss");
     return PartialView("Edit");
}

部分视图

@using (Ajax.BeginForm("Edit", "Home", new AjaxOptions{UpdateTargetId = "mydiv"}))
    {
        <input type="submit" value="Save" />
    }

索引视图(部分内容)

<div id="mydiv">
    <span>The Time is: @ViewBag.Time</span>
</div>
@Html.Partial("Edit")

ClientValidationEnabledUnobtrusiveJavaScriptEnabledtrue jquery.validate.min.jsjquery.validate.unobtrusive.min.jsjquery.unobtrusive-ajax.min.jsMicrosoftMvcAjax.jsMicrosoftAjax.js已添加

首先,时间显示正确。第一次单击“保存”按钮时,时间消失,“保存”按钮显示两次,然后没有任何反应,除非在单击两个按钮时调用“操作”。

2 个答案:

答案 0 :(得分:2)

你有些事情倒退了。试试这个:

<强>控制器

public ActionResult Edit(string temp)   
{  
    ViewBag.Time = DateTime.Now.ToString("hh:mm:ss");  
    return PartialView("Edit");   
}

索引视图

@using (Ajax.BeginForm("Edit", "Home", new AjaxOptions{UpdateTargetId = "mydiv"}))     
    {     
        <input type="submit" value="Save" />     
    }            
@Html.Action("Edit") 

部分视图(编辑)

<div id="mydiv">
    <span>The Time is: @ViewBag.Time</span> 
</div>

ViewBag只能在运行时访问(当页面最初加载时),这意味着如果您通过ajax获取数据,则控制器操作中的视图包只能访问该控制器操作的部分视图(而不是index.cshtml)通过ajax调用动作)。总之(tl; dr)能够使用你在Edit动作中设置的viewbag,你需要在返回的partialview中使用它。 (而不是其他任何地方,因为剃刀引擎没有重新呈现内容)

答案 1 :(得分:-1)

I set things up like so. 

很简单,但我注意到发帖的人 问题和答案没有插入模式,所以我发布了这个蹩脚的代码:)

 {
                                                                            HttpMethod = "post",
                                                                            InsertionMode = InsertionMode.Replace,
                                                                            UpdateTargetId = "the div youwant to update / replace"
                                                                        }