如何通过部分视图从ajax成功获取模型的特定数据

时间:2019-06-20 07:34:26

标签: c# jquery ajax asp.net-mvc

我想获得ajax成功中模型的特定值。我不能在这里使用Json结果,因为我还需要使用部分视图将模型值加载到div容器中。

这是我的模特

public class ProductModel
{
    public int ProductId { get; set; }

    public decimal? Cost { get; set; }

    public string Description { get; set; }

    public bool IsCostUpdated { get; set; }
}

我只想在ajax成功中获取IsCostUpdated的值。在控制器中,我必须返回强类型的局部视图。 这是代码

[HttpPost]
public ActionResult CheckProductCost(ProductModel model)
    {
        ModelState.Clear();
        using (var db = DataContext.Db)
        {
            model.IsCostUpdated = model.CheckUpdate(db);
        }

        return PartialView("ProductDataTable", model);
    }

这是我的ajax调用代码

$.ajax({
        url: productCostUrl,
        dataType: 'html',
        type: 'POST',
        data: $('body').find('.productTable').closest('.dataComponent').find(':input').serialize(),
        success: function (d) {
            var isSuccess = d.IsCostUpdated; [I want this value]

           $('body').find('.productTable').html(d)
        }
    });

4 个答案:

答案 0 :(得分:0)

可以返回当前JsonResult中的ActionResult。只需检查发出的请求是否为ajax请求即可。您的ActionResult会变成这样:

[HttpPost]
public ActionResult CheckProductCost(ProductModel model)
{
    ModelState.Clear();
    using (var db = DataContext.Db)
    {
        model.IsCostUpdated = model.CheckUpdate(db);
    }

    if (Request.IsAjaxRequest()) // THIS IS AVAILABLE INSIDE THE SYSTEM.WEB.MVC ASSEMBLY
        return Json(new { IsCostUpdated = model.IsCostUpdated });

    return PartialView("ProductDataTable", model);
}

答案 1 :(得分:0)

您没有返回数据。您将返回部分视图。

return PartialView("ProductDataTable", model);

如果您只想返回CheckProductCost返回的值,那么您可以这样做。

return Json(model);

答案 2 :(得分:0)

您可以像下面一样返回json所需的视图和数据

return Json(new
                    {
                        view = RenderRazorViewToString(ControllerContext, "ProductDataTable", model),
                        IsCostUpdated = model.IsCostUpdated
                    });


// Render Razor view as string to populate dom
public static string RenderRazorViewToString(ControllerContext controllerContext, string viewName, object model)
        {
            controllerContext.Controller.ViewData.Model = model;
            using (var sw = new StringWriter())
            {
                var ViewResult = ViewEngines.Engines.FindPartialView(controllerContext, viewName);
                var ViewContext = new ViewContext(controllerContext, ViewResult.View, controllerContext.Controller.ViewData, controllerContext.Controller.TempData, sw);
                ViewResult.View.Render(ViewContext, sw);
                ViewResult.ViewEngine.ReleaseView(controllerContext, ViewResult.View);
                return sw.GetStringBuilder().ToString();
            }
        }

// Razor View - Ajax call Success
success: function (data) {
                    $('body').find('.productTable').html(data.view);
                    var isSuccess = data.IsCostUpdated;
                }

答案 3 :(得分:0)

在AJAX成功回调中,您可以访问数据对象,即在回调中称为“ d”的对象。

尝试进行console.log(d),您将看到d对象具有responseJSON属性。这就是您访问媒体资源所需的条件。

代替这样做:var isSuccess = d.IsCostUpdated; [I want this value]尝试var isSuccess = d.responseJSON.IsCostUpdated;

另一件事,如果要将数据从控制器传递给ajax调用,请尝试执行:return Ok(model)而不是返回部分视图。如果返回部分视图,则该页面的html将作为响应数据传递到Ajax Success回调中的数据对象。