2

基本上,我的枚举值决定了您所在的页面(在 url 中),并且我有下面的“if”语句来涵盖这种情况,如果用户在 url 中输入大量文本,则默认为“New”..... .put 如果我输入除枚举值以外的任何数字,它会显示该数字而不是默认的“新建”页面。

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

动作结果

            [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);
    }

登陆索引页面时的网址为.. project/Referrals ,在页面上选择选项卡后的网址为... project/Referrals?Status=2 ,在Url project/Refferals?status 中输入不同数字时的网址=56473 ,您的视图将使用这些数字代替枚举状态值呈现。

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

4

1 回答 1

0

编辑:如评论中所述,您可以Enum.IsDefined用于解析枚举的 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;   
}    
于 2013-11-14T16:04:06.097 回答