如何将消息从局部视图传递到视图? 我想点击“go”按钮; “你好”会出现。
我的观点如下:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
@section bodyy
{
if (ViewBag.AlertMessage != null)
{<script>alert("@ViewBag.AlertMessage");</script> }
@Html.Action("_comment" , "home") // partial view
}
局部视图:
@{
Layout = null;
}
@model MvcApplication2.Models.MyClasses.commentclass
<script src="~/Scripts/jquery-1.7.1.js"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
@using(Ajax.BeginForm("_comment","home",new AjaxOptions{HttpMethod="Post"}))
{
foreach (var item2 in MvcApplication2.Models.MyClasses.helper.ItemsOfTbltext(Model.id))
{
@Html.RadioButtonFor(z => Model.idtext, item2.id_text)<text> @item2.text</text>
}
<button type="submit" > go </button>
}
我的控制器是:
[HttpPost]
public ActionResult _comment(tbl_download model)
{
shopContext db = new shopContext();
var str = db.tbl_download.Where(z=>z.id==model.idtbl).FirstOrDefault().text;
ViewBag.AlertMessage = "hello" ; // i cant send hello to view
return PartialView(model);
}
答案 0 :(得分:0)
保持简单。 ViewBag
就像一个动态框,可以容纳你放入其中的任何内容。首先清理你的剃刀页面里的烂摊子。
这应该是查看:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<script src="~/Scripts/jquery-1.7.1.js"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
<script type="text/javascript">
function DisplaySuccessMessage()
{
alert('@ViewBag.AlertMessage');
}
</script>
<h2>Index</h2>
@section body
{
@Html.Action("_comment" , "home") // partial view
}
部分视图
由于您一直在使用Ajax.BeginForm()
,因此您可以使用OnSuccess
ajax选项在请求完成时返回响应。
@model MvcApplication2.Models.MyClasses.commentclass
@using(Ajax.BeginForm("_comment","home",new AjaxOptions{ HttpMethod="Post", OnSuccess="DisplaySuccessMessage"}))
{
foreach (var item2 in MvcApplication2.Models.MyClasses.helper.ItemsOfTbltext(Model.id))
{
@Html.RadioButtonFor(z => Model.idtext, item2.id_text)<text> @item2.text</text>
}
<input type="submit" id="SubmitButton" value="Go" />
}
_comment
不是ActionResult
的好名字。你应该用更有意义的东西改变它。我想这涉及到你的要求,但是你不需要局部视图,直到你想让它可以重复使用或者需要在ajax场景中替换响应。
我给出的回复并不遵循最佳做法,因为我必须符合您的要求范围,但它会解决您的问题。
答案 1 :(得分:0)
只需处理AJAX表单的 OnComplete jquery事件 -
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
<script>
function OnComplete(xhr, status, error) {
alert(xhr.responseText);
}
</script>
@using (Ajax.BeginForm("Click", "Cal", new AjaxOptions {HttpMethod="POST", UpdateTargetId = "result", OnComplete = "OnComplete" }))
{
<input type="submit" value="Click"/>
}
控制器操作 -
public ActionResult Click()
{
return Content("I am Ok");
}
当您执行它时,将显示一个带有服务器消息的警告框 -
Alternatively you can use AJAX Post using JQuery.我认为这种方法是更好的选择,因为您可以更好地控制数据格式和显示选项。