从部分视图传递消息到视图

时间:2014-02-01 11:38:02

标签: asp.net-mvc asp.net-mvc-4

如何将消息从局部视图传递到视图? 我想点击“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);
    }

2 个答案:

答案 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");
    }

当您执行它时,将显示一个带有服务器消息的警告框 -

enter image description here

Alternatively you can use AJAX Post using JQuery.我认为这种方法是更好的选择,因为您可以更好地控制数据格式和显示选项。