-1

我有一个带有两个部分视图(parPage1 和 ParPage2)的剃须刀页面(index.cshtml),而且我在每个部分视图上都有按钮。

当我单击 partialView 上的 button1 时,应该做一个 ajax 回发并点击相应的操作结果并使用来自控制器的 ViewBag.Message1 的消息加载部分视图。

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

问题

当我单击按钮时,它正在向控制器执行 ajax 回发,但它没有从 ViewBag 中选择消息以显示在重新加载的 PartialView 页面上。为什么它没有从 viewbag 中选择数据。当我调试时,我可以看到 ViewBag 在剃刀页面上重新加载之前收到实际消息。但它没有显示在视图上。请帮我解决这个问题。

发布到控制器后,我实际上需要检查发布的数据是否已经存在于 db 中,如果数据已经存在,我想向 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>

下面是我的 ParPage2

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

    }
}
4

1 回答 1

-1

也许尝试这样的事情(如果会出现错误,你应该知道我在技术上没有在 MVC4 和 Jquery 中编写任何应用程序:p)

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);
}

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

于 2013-09-01T00:21:04.327 回答