我是否需要每个动作的视图?

时间:2010-08-19 16:53:44

标签: asp.net-mvc view controller action

我已经在ASP.NET MVC中开发了一段时间。到目前为止,控制器操作相当简单。每个操作都返回其相应的视图。但是,我最近创建了一个我不一定需要页面的动作(动作的目的是使用数据库)。

我的问题是 - 在这里做什么是正确的。在方法结束时,我返回Response.Redirect('\ Controller \ View'),所以我回到另一个视图。是否有可能在行动结束时不必返回任何类型的视图?这里的最佳做法是什么?

4 个答案:

答案 0 :(得分:2)

如果您需要重定向用户,因为他们点击了链接,然后重定向用户。

如果您使用Ajax或其他技术发布并且没有有意义的响应,则将控制器操作方法更改为返回类型为void。

答案 1 :(得分:1)

如果您使用AJAX发布并且您不需要重定向用户或显示新视图,您可能需要考虑返回一个向用户显示确认消息的字符串。

答案 2 :(得分:0)

我想说,一个动作应该总是处理一个HTTP请求。如果它返回一个视图或重定向到另一个动作,则两者都是可能的。

请考虑以下事项:

[HttpGet] // Handles only GET requests
public ActionResult Edit(int id)
{
     // get entity from repository
     // and create edit model
     return View(editModel);
}

[HttpPost]
public ActionResult Edit(EntityEditModel editModel)
{
     // if ModelState is valid, save entity
     // and if success redirect to index 
     return RedirectToAction("Index");
}

第一个动作返回一个视图,第二个动作不返回(仅当ModelState无效时,它才重新显示Edit视图)。这是绝对正确的(甚至推荐)。但是这两个动作都处理HTTP请求。

答案 3 :(得分:0)

您可以使用波浪语法提供视图的完整路径,如下所示:

指定视图

public ActionResult Index() 
{
ViewBag.Message = "Modify this template to jump-start
your ASP.NET MVC application.";
return View("~/Views/Example/Index.cshtml");
}

使用tilde语法时,必须提供视图的文件扩展名,因为这会绕过 查看引擎的内部查找机制以查找视图。