asp.net-mvc - 如何刷新 AJAX 帖子上的 Razor View

标签 asp.net-mvc asp.net-mvc-3 jquery razor asp.net-mvc-4

大家好,

我可以使用 ajax.post 发布到 Controller ,但成功后如何使我的 View 刷新新数据。

我需要使用 @Html.BeginForm 来执行此操作吗?

这是我的观点。

<div>
    <p>Order lines allocates to <b>@Model.Name (@Model.Code) </b>
</div>

@if (Model.OrderLineAllocations.Any())
{
    
    @grid.GetHtml(
             columns: grid.Columns(
                 grid.Column(header: "Dispatched", style: "row-selector", format: @<text><input name="chkSelected" class="myCheckbox" onclick="expandableEvent(this)" type="checkbox" value="@item.IdAllocation" /></text>),
                 grid.Column(header: "Order Ref", format: item => item.OrderLineItem.OrderLine.Order.OrderRef)
                 ),
             tableStyle: "expandable-table",
             rowStyle: "expandable-master-row",
             htmlAttributes: new { id = "gridLineAllocations" })
    <br />
    <input type="hidden" id="hidUnselectedValues" name="hidUnselectedValues" />
    
    <input type="submit" name="action" value="Dispacth" id="btnDispacth" />
    <input type="submit" name="action" value="Revert" id="btnRevert" />
    
}
else
{
    @Html.Raw("No records found....");
}

这是我的 ajax 帖子

$(document).ready(function() {
    unSelected = [];
    $("#btnDispacth").click(dipatchAllocations);
    $("#btnRevert").click(revertAllocations);
});

function dipatchAllocations() {
    var objInputEmail = $("#hidUnselectedValues");

    if (objInputEmail != null) {
        var id = objInputEmail.val();
        if ((id != null) && (id != "")) {
            $.ajax({
                type: 'POST',
                url: '/Batch/GetData',
                data: '{ "allocationId" : "' + id + '","batchId" : "' + @Model.Id + '" }',
                contentType: "application/json; charset=utf-8",
                //contentType:"application/x-www-form-urlencoded",
                traditional: true,
                success: subscribed,
                error: errorInSubscribing
            });
        } else {
            alert('Please enter a valid email address in order to subscribe.');
        }
    }
};

这是我的 Controller 操作

[HttpPost]
public ActionResult GetData(long[] allocationId,long batchId)
{
    var model = context.GetData(batchId)
    model.Name = "asdaksdjaksdj";
    return View("Finalize", model);
}

我有一些想法,我必须在成功回电后执行此操作。但我不确定如何将更新后的模型绑定(bind)到客户端的 View 。

谢谢

最佳答案

mvc内部没有简单的“重新绑定(bind)”方法,最后还是html、css和js。
我看到有 2 个选项可以实现所需的行为。

选项 1. 使用 POST 结果覆盖渲染内容

在这种情况下,您的 View 将类似于:

<div id="content">
  <div>
    <p>Order lines allocates to <b>@Model.Name (@Model.Code) </b>
  </div>
  ...
  else
  {
    @Html.Raw("No records found....");
  }
</div>

在 JavaScript 上:

$.ajax({
    type: 'POST',
    url: '/Batch/GetData',
    dataType: "html",
    success: function(data, textStatus, jqXHR){
        $('#content').html(data);
    }
});

选项 2. 在每次加载时填充由 javascript 渲染的 html

这需要将 Razor 逻辑移至 JavaScript。 您的 View 将如下所示:

<div>
    <p>Order lines allocates to <b id="NameAndCode"></b>
</div>

JavaScript 将填补空白:

$(function(){
  var model = {
    NameAndCode: "@Model.Name (@Model.Code)"
  }

  fillView(model);

})

var fillView = function(data){
  $('#NameAndCode').html(data.NameAndCode)
}

$.ajax({
    type: 'POST',
    url: '/Batch/GetData',
    dataType: "json",
    success: function(data, textStatus, jqXHR){
        fillView(data);
    }
});

这只是一小部分,只是为了展示这个想法。

这取决于具体情况选择哪个选项。

关于asp.net-mvc - 如何刷新 AJAX 帖子上的 Razor View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13611485/

相关文章:

javascript - jQuery 模式对话框打开多次

c# - 为什么 MVC 会在看似没有 Null Reference 的情况下抛出 NullReferenceException?

jquery - JQPlot - 基于区域的格式刻度

asp.net-mvc - '/' 应用程序中的 ASP.NET MVC3/Razor 服务器错误

asp.net-mvc - MVC3 TextBoxFor 带有编码文本

jquery - 我可以动态更改 paho websocket 中订阅的主题吗?

jQuery Mobile(点击事件)

jquery - 使用 ASP.NET MVC 在客户端获取用户名

asp.net-mvc - 按规则显示格式

asp.net-mvc-3 - 无法在 ASP.NET MVC3 中的部分 View 中访问 ViewBag