无法通过操作调用查看

时间:2014-07-02 07:39:06

标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我有一个视图,我在多个动作中使用它向用户发送错误,这个视图工作正常,当我将它返回给ActionResult而不是JsonReslut时,有一种方法在我返回JsonReslut时以某种方式调用此视图?一些解决方法?

例如,这是有效的

public ActionResult Index()
{
...

return View("Err");
}

这是正在运作

public JsonResult Create ()
{
...

return View("Err");
}

这只是没有任何控制器或模型的视图页面......

4 个答案:

答案 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();
}