C# MVC4 Jquery Ajax发布部分视图并从控制器获取ViewBag数据

C# MVC4 Jquery Ajax发布部分视图并从控制器获取ViewBag数据,c#,jquery,asp.net-mvc-4,C#,Jquery,Asp.net Mvc 4,我有一个razor页面(index.cshtml),有两个partialView(parPage1和ParPage2) 我在每个partialView上都有按钮 当我点击partialView上的按钮1时,我应该做一个ajax回帖,点击cooreponding操作结果,并用来自控制器的ViewBag.Message1的消息加载partialView 因此,当我点击partialView1上的button1时,它应该发回并重新加载一条消息,上面写着“button1 on partialView1

我有一个razor页面(index.cshtml),有两个partialView(parPage1和ParPage2) 我在每个partialView上都有按钮

当我点击partialView上的按钮1时,我应该做一个ajax回帖,点击cooreponding操作结果,并用来自控制器的ViewBag.Message1的消息加载partialView

因此,当我点击partialView1上的button1时,它应该发回并重新加载一条消息,上面写着“button1 on partialView1 clicked”

问题


当我点击按钮时,它正在向控制器进行ajax回发,但它没有从ViewBag中选取要显示在重新加载的PartialView页面上的消息。为什么它没有从ViewBag中选取数据。当我调试时,我可以看到ViewBag在razor页面上重新加载之前获得了实际消息。但是它没有显示在视图上。请帮助我解决此问题

在发布到控制器后,我实际上需要检查发布的数据是否已经存在于数据库中,如果数据已经存在,我想向partialView发送一条消息。

下面是我的ParPage1.cshtml

@using (Ajax.BeginForm("ParPage1", "Home", new { id = 1 }, new AjaxOptions { UpdateTargetId = "Page1Form" }, new { encType = "multipart/form-data" }))
    {
<div>
<p>This is partial view page1</p>

    <input type="button" title="" value="Button1" id="btnButton1"/>
    <p>@ViewBag.Message1</p>
    </div>

}
<script type="text/javascript">
    $(document).ready(function () {
        $("#btnButton1").click(function (e) {
            var data = { "Data1":"BCXDEFX", "Data2": "BCDEF" };
            $.ajax({
                type: "POST",
                url: "/Home/Button1Clicked",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify(data),
                dataType: "json",
                success: saveItemCompleted(data),
                error: saveItemFailed()

            });

        });

        function saveItemCompleted(data) {
        }

        function saveItemFailed(request, status, error) {
        }

    });

</script>

也许可以尝试类似的方法(如果出现错误,您应该知道我在技术上没有用MVC4和Jquery:p编写任何应用程序)

public ActionResult按钮1clicked()
{
//ViewBag.Message1=“按钮1已单击”;
//返回部分视图(“ParPage1”);
return“Button1Clicked”;//只返回简单消息
}
“@ViewBag.Message1

” 更改为:

尚未单击

函数saveItemCompleted(数据){ $(“#消息”)。文本(数据); }

你不需要下载所有的部分视图,你只需要一个简单的字符串。

那么问题是什么?您是否在询问将什么代码放入
saveitempleted
saveitemfiled
处理程序?您只是想在弹出窗口中显示消息还是想重新呈现部分视图?当我单击按钮时,它正在向控制器执行ajax回发,但它没有从ViewBag中拾取消息以显示在重新加载的PartialView页面上。为什么不从ViewBag中拾取数据。当我调试时,我可以看到ViewBag在razor页面上重新加载之前得到了实际的消息。但它没有显示在部分视图上。请帮助我解决这个问题。通常,当我们通过ajax调用控制器并返回
PartialView
时,我们会将结果放在表单上的某个位置,例如
$('#myTargetDiv').html(数据);
您是否使用javascript调试器查看结果(
数据
)从您的ajax调用中?这里有一篇排名很高的帖子,展示了一个很好的例子:希望这有帮助。在发布到控制器后,我实际上需要检查发布的数据是否已经存在于db中,如果数据已经存在,我想向partialView发送一条消息。
@using (Ajax.BeginForm("ParPage2", "Home", new { id = 1 }, new AjaxOptions { UpdateTargetId = "Page2Form" }, new { encType = "multipart/form-data" }))
    {
<div>
<p>This is partial view page2</p>
    <input type="button" title="" value="Button2" id="btnButton2"/>

    <p>@ViewBag.Message2</p>
    </div>

  }
<script type="text/javascript">
    $(document).ready(function () {
        $("#btnButton2").click(function (e) {
            var data = { "Data1": "BCXDEFX", "Data2": "BCDEF" };
            $.ajax({
                type: "POST",
                url: "/Home/Button2Clicked",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify(data),
                dataType: "json",
                success: saveItemCompleted(data),
                error: saveItemFailed()

            });

        });

        function saveItemCompleted(data) {
        }

        function saveItemFailed(request, status, error) {
        }

    });

</script>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplication4.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {

            return View();
        }

        public ViewResult ParPage1()
        {
            return View();
        }
        public ViewResult ParPage2()
        {
            return View();
        }
        public ActionResult Button1Clicked()
        {
            ViewBag.Message1 = "Button1Clicked";
            return PartialView("ParPage1");
        }
        public ActionResult Button2Clicked(myData data)
        {
             //Validate for duplicate data
               if(duplicate)
                  {
            ViewBag.Message2 = "This data already exists in table. Please review";
                 }
                 else
                    {SaveRecord();}
            return PartialView("ParPage2");
        }

    }
}
public ActionResult Button1Clicked()
{
        //ViewBag.Message1 = "Button1Clicked";
        //return PartialView("ParPage1");
        return "Button1Clicked"; // return just simple message
}


" <p>@ViewBag.Message1</p> "
change to: <p id="message">not clicked yet</p>



function saveItemCompleted(data) {
       $("#message").text(data);
}