为什么在Url中使用Non-Enum值

时间:2013-11-14 14:32:49

标签: c# asp.net html5 asp.net-mvc-4 enums

基本上我的枚举值确定你的页面(在网址中)并且我有下面的“if”语句来覆盖这种情况,如果用户在网址中输入了一段文本,则默认为“新”。 ....如果我输入除Enum值以外的任何数字,则显示该数字而不是默认的“新”页面。

我不想发布大量代码,所以希望它很清楚,如果在URL中输入文本,它会正确重定向,但不能用于非枚举值。有没有办法检查Url输入是否与枚举值匹配?

的ActionResult

            [HttpGet]
    public ActionResult Index(string status, string message)
    {

        var referralStatus = ReferralStatus.New;

        if (!Enum.TryParse(status, out referralStatus))
        {
            referralStatus = ReferralStatus.New;
        }

        var model = new ReferralsModel();
        model.Status = referralStatus.ToString();

        model.ReferralsCount.Status = referralStatus.ToString();


        return View(model);
    }

登陆索引页面时的网址显示为.. 项目/推荐, 选择页面上的标签后,您的网址会显示... 项目/推荐?状态= 2, 在网址中输入不同数字时的网址 project / Refferals?status = 56473, 您的视图使用这些数字代替枚举状态值进行渲染。

请注意这是一个asp.net mvc 4应用程序

1 个答案:

答案 0 :(得分:0)

编辑:如评论中所述,您可以使用Enum.IsDefined来解析Enum的int表示

 if (!Enum.TryParse(status, out referralStatus))

应该是

 if (!Enum.TryParse(status, out referralStatus) || !Enum.IsDefined(typeof(ReferralStatus),referralStatus))

根据您的评论,也许您可​​以尝试以下方式:

ReferralStatus referralStatus;

try{
   referralStatus = (ReferralStatus) int.Parse(status);       
}
catch{
    status = ((int)ReferralStatus.New).ToString();
    referralStatus = ReferralStatus.New;   
}