asp.net-mvc - MVC 3表单通过JQuery重新加载提交 View 而不是 Controller 返回的 View

标签 asp.net-mvc jquery submit

我是 MVC/Jquery 新手,遇到了问题。我有一个包含 WebGrid 的表单,每行上都有编辑/删除 anchor 。当用户单击编辑时,我需要运行一些脚本来加载 Controller 在返回编辑 View 之前所需的 json 对象。使用提交按钮工作正常,但当我尝试通过 Ajax 发布时,编辑 View 永远不会出现,带有网格的表单只会重新加载。

表格

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "shopform" }))
{
    <div id="grid" class="gridWrapper1">
    </div>
}

脚本

        function EditShop(id) {
                idShop = id; // save id for json scraper later
                $("#shopform").submit();
                return 0;
        }

       $(document).ready(function() {
            $("#shopform").submit(function(){
                var jsonData = GetJsonModel(); // grabs various fields including idShop
                $.ajax({
                    type:'POST',
                    url:'/Admin/Shops/Edit/',
                    data: jsonData,
                    contentType: 'application/json; charset=uft-8',
                    error: ajaxError,
////// edit with solution here
                    success: function(data) {
                       $(document)[0].body.innerHTML = data;  // contains View returned by 
                    }                                         // controller action
                });
                return false; 
            });
        });

用于构建带有编辑/删除 anchor 标记的网格列的 Controller 代码:

    grid.Column(format: (item) =>
    {
      return new HtmlString(
           "<a href='JavaScript:void(0)' name='editShop' value='" +
              item.ShopID.ToString() +
              "' class='linkbutton' " + "onclick='EditShop(" + item.ShopID.ToString() + 
              ");'>Edit</a>&nbsp;&nbsp;&nbsp;" +
           "<a href='JavaScript:void(0)' name='delShop' value='" +
              item.ShopID.ToString() +
              "' class='linkbutton' onclick='DelShop(" +
              item.ShopID.ToString() + ");'>Remove</a>"
        );
}),

最后是用于编辑 PRG 的 Controller 操作:

    [HttpPost]
[ActionName("Edit")]
[ViewModelFilter(Param = "model", JsonDataType = typeof(ShopsViewModel))]
public ActionResult EditViaPost(ShopsViewModel model)
{
    int nid = model.ShopID;
    ShopViewModel shop = new ShopViewModel(nid);
    Session["model"] = (object) model;
    return RedirectToAction("Edit", new RouteValueDictionary(new { shop.Name }));
}

[HttpGet]
[ActionName("Edit")]
public ActionResult EditViaGet(string slug) //, string curPage, string rowsPerPage )
{
    ShopsViewModel model = (ShopsViewModel)Session["model"];
    ShopViewModel shop = null;
    if (model != null)
    {
        int nID = model.ShopID;
        ShopViewModel shop = new ShopViewModel(nID);
    } ... // create empty shop omitted for brevity

    return View("Edit", shop);  <--- THIS DOES NOT LOAD IF SUBMITTING VIA AJAX
}

如果我将 Controller /操作添加到表单声明中并使用按钮提交,编辑 View 会呈现,所以我怀疑我没有正确处理 $.post 的返回,但我需要返回的不仅仅是 ID这就是我使用 JSON 的原因。

最佳答案

没有发生任何事情,因为您没有在 Ajax 调用上定义成功回调来处理 Controller 返回的数据。您的 View 将在成功处理程序中返回。

$("#shopform").submit(function(){
    var jsonData = GetJsonModel(); // grabs various fields including idShop
    $.ajax({
        type:'POST',
        url:'/Admin/Shops/Edit/',
        data: jsonData,
        contentType: 'application/json; charset=uft-8',
        success: function(yourView) {
            alert(yourView);
        },
        error: ajaxError
    });
    return false; 
});

关于asp.net-mvc - MVC 3表单通过JQuery重新加载提交 View 而不是 Controller 返回的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6331741/

相关文章:

asp.net-mvc - Nhibernate/MVC : Dealing with lazy loaded collections in View

jquery - 未捕获的 TypeError : $(. ..).draggable 不是 ASP .NET MVC View 文件中的函数错误

jQuery 选择器帮助 - 或、和

javascript - 防止 JQuery 触发多个 AJAX GET 请求

javascript - 按钮不会提交脚本

asp.net-mvc - 从ASP MVC 3 Beta更新到RC后出现错误

javascript - 使用 css 和 javascript 创建动态垂直百分比条?

C# MVC 使用 jquery 创建基于计时器的自动注销?

javascript - 如何根据javascript中的条件控制表单操作?

javascript - j-query和javascript表单使用多个提交不提交表单中的所有数据