加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何在路由上处理null {id}?

发布时间:2020-12-16 03:18:58 所属栏目:asp.Net 来源:网络整理
导读:如果用户使用 http://www.mysite.com/Quote/Edit而不是 http://www.mysite.com/Quote/Edit/1000访问我的网站会怎么样?换句话说,他们没有为{id}指定值.如果他们不这样做,我想显示一个漂亮的“未找到”页面,因为他们没有提供ID.我当前通过接受一个可以为null
如果用户使用 http://www.mysite.com/Quote/Edit而不是 http://www.mysite.com/Quote/Edit/1000访问我的网站会怎么样?换句话说,他们没有为{id}指定值.如果他们不这样做,我想显示一个漂亮的“未找到”页面,因为他们没有提供ID.我当前通过接受一个可以为null的int作为Controller Action中的参数来处理这个问题,它工作正常.但是,我很好奇是否有更标准的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");
    }

解决方法

你的其他选择是

>有两个编辑动作;一个以int id作为参数,另一个没有任何参数.
>只有编辑(int id)作为你的动作,让你的控制器的HandleUnknownAction方法做你未找到实体时应该做的事情(这有点复杂).

但我喜欢你最好的方法,因为它很简单并且能够正确处理这种情况.

顺便说一下,你不需要那个局部变量,你可以这样做以获得更好的可读性:

//...
if (!id.HasValue)
    return View("QuoteNotFound");

var viewModel = new QuoteViewModel(this.UserId);
viewModel.LoadQuote(id.Value);
//...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读