我已经在ASP.NET MVC中开发了一段时间。到目前为止,控制器操作相当简单。每个操作都返回其相应的视图。但是,我最近创建了一个我不一定需要页面的动作(动作的目的是使用数据库)。
我的问题是 - 在这里做什么是正确的。在方法结束时,我返回Response.Redirect('\ Controller \ View'),所以我回到另一个视图。是否有可能在行动结束时不必返回任何类型的视图?这里的最佳做法是什么?
答案 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语法时,必须提供视图的文件扩展名,因为这会绕过 查看引擎的内部查找机制以查找视图。