在我的View
我有一个带有微调器的功能区,用户可以选择int
类型作为参数来获取存储库中的一些数据。
所以我提出了一个ajax请求:
var url = "/ControllerExample/GetJsonUrl?param=" + s.GetItemValueByName("countParam") ;
jQuery.ajax({
type: "GET",
url: url,
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
window.location.href = data;
},
failure: function (errMsg) {
alert(errMsg);
}
});
在我的控制器中,我有ActionResult
返回JsonResult
,其中包含“成功”功能的特定网址:
public ActionResult GetJsonUrl(string param)
{
var urlHelper = new UrlHelper(ControllerContext.HttpContext.Request.RequestContext);
string url = urlHelper.Action("OtherAction", "ControllerExample", new {id = param});
return new JsonResult {Data = url, JsonRequestBehavior = JsonRequestBehavior.AllowGet};
}
因此,如果结果是成功,请求将返回到ajax成功函数,然后转到 ExampleController 以执行 OtherAction
我想只用一个动作来做,有可能吗?刷新JsonResult
中的页面。
答案 0 :(得分:2)
您可以使用模型将该视图渲染为字符串并使用JSON结果传递。然后只需替换整个DOM elemet。
public string RenderRazorViewToString(string viewName, object model)
{
ViewData.Model = model;
using (var sw = new StringWriter())
{
var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
viewResult.View.Render(viewContext, sw);
viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
return sw.GetStringBuilder().ToString();
}
}
在这里
success: function (data) {
$("#targetDOMElementId").val(data);
},
targetDOMElementId 可以是DIV
的容器View
。