我有一个视图,我在多个动作中使用它向用户发送错误,这个视图工作正常,当我将它返回给ActionResult而不是JsonReslut时,有一种方法在我返回JsonReslut时以某种方式调用此视图?一些解决方法?
例如,这是有效的
public ActionResult Index()
{
...
return View("Err");
}
这是不正在运作
public JsonResult Create ()
{
...
return View("Err");
}
这只是没有任何控制器或模型的视图页面......
答案 0 :(得分:1)
你没有为JsonResult返回一个视图。
尝试类似:
[HttpPost]
public ActionResult Create (ModelClass newItem)
{
int newItemId = -1;
string message = "";
bool createdOk = false;
try{
newItemId = CreateNewItemInDatabase(newItem); //example - you'd need a proper implementation!
}
catch (Exception ex)
{
message = "Error: " + ex.Message;
}
return Json(new {ErrMessage = message, Ok = createdOk, newItemId = newItemId}) //example. Any object would do.
}
ViewResult和JsonResult都继承自ActionResult。
JsonResult不从ViewResult继承!
与此交互的视图可能如下所示:
@model ModelClass
<form id="MyNewForm">
@Html.TextBoxFor(m => m.Name)
@Html.TextBoxFor(m => m.EmailAddress) //etc
<input type ="button" value="Create" onClick="create();" />
</form>
<script>
// javascript function that calls the Create Action Method via ajax
function create(){
$.post({
url : 'Create',
data: $('#MyNewForm').serialize(),
success: function (result){ // this is a callback function that gets executed
// after getting the results of the ajax post
if (result.Ok)
{
alert('New item with id:' + result.NewItemId + ' created successfully!');
} else
{
alert('Failed to create item: ' + result.ErrMessage);
}
}
});
}
</script>
注意这只是一个例子,可能有错误。 我在这个例子中使用过jQuery,但是如果你愿意,可以使用纯javascript
答案 1 :(得分:1)
我假设您使用javascript调用此操作。 如果是这样,你应该返回这样的东西:
public JsonResult Create ()
{
...
return Json(new { status = "error", redirect = "error_page_url" }, JsonRequestBehavior.AllowGet);
}
然后在javascript中处理错误(重定向到错误页面)
以下是使用jQuery的示例:
$.ajax({
type: "get", url: "/controller/Create", dataType : "json",
success: function (response) {
if (response.status == "error") {
window.location.href = response.redirect;
}
else {
// process results...
}
},
error: function (request, status, error) {
alert(request.responseText);
}
});
答案 2 :(得分:1)
您可以对错误执行一项常见操作,并在出错时重定向到此操作
public ActionResult Error()
{
return View("Err");
}
public ActionResult Index()
{
...
return RedirectToAction("Error");
}
public ActionResult Create ()
{
...
return RedirectToAction("Error");
}
答案 3 :(得分:1)
public JsonResult Create ()
{
...
return RenderRazorViewToString(viewname,model);
}
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();
}