我想获得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)
}
});
答案 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回调中的数据对象。