如果用户使用 http://www.mysite.com/Quote/Edit 访问我的网站怎么办?而不是http://www.mysite.com/Quote/Edit/1000换句话说,它们没有指定 {id} 的值。如果他们不这样做,我想显示一个漂亮的“未找到”页面,因为他们没有提供 ID。我目前通过接受可为空的 int 作为 Controller 操作中的参数来处理此问题,并且工作正常。然而,我很好奇是否有更标准的 MVC 框架方法来处理这个问题,而不是我目前使用的代码(见下文)。是处理这个问题的更顺利的方法,还是这是正确的方法?
[HttpGet]
public ActionResult Edit(int? id)
{
if (id == null)
return View("QuoteNotFound");
int quoteId = (int)id;
var viewModel = new QuoteViewModel(this.UserId);
viewModel.LoadQuote(quoteId);
if (viewModel.QuoteNo > 0)
{
return View("Create", viewModel.Quote.Entity);
}
else
return View("QuoteNotFound");
}
最佳答案
您的其他选择是
- 有两个
Edit
操作;一个以int id
作为参数,另一个不带任何参数。 - 仅将
Edit(int id)
作为您的操作,并让 Controller 的HandleUnknownAction
方法在找不到您的实体时执行其应该执行的操作(这是一个有点复杂)。
但我最喜欢你的方法,因为它简单且能正确处理情况。
顺便说一句,您不需要该局部变量,您可以这样做以获得更好的可读性:
//...
if (!id.HasValue)
return View("QuoteNotFound");
var viewModel = new QuoteViewModel(this.UserId);
viewModel.LoadQuote(id.Value);
//...
关于asp.net-mvc - 如何处理路由上的 null {id}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2427179/