控制器:
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")
ClientValidationEnabled
和UnobtrusiveJavaScriptEnabled
为true
jquery.validate.min.js
,jquery.validate.unobtrusive.min.js
,jquery.unobtrusive-ajax.min.js
,MicrosoftMvcAjax.js
和MicrosoftAjax.js
已添加
首先,时间显示正确。第一次单击“保存”按钮时,时间消失,“保存”按钮显示两次,然后没有任何反应,除非在单击两个按钮时调用“操作”。
答案 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"
}