asp.net-mvc – asp.net mvc – string或int的路由(即/ type / 23或/ typ
|
我有以下情况我想接受以下路径 '/type/view/23' or '/type/view/hats' 其中23是帽子的ID. 控制器看起来像这样: public class TypeController
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult View(int id)
{
...
}
}
现在如果他们传球23没问题.如果他们传递帽子,我有一些工作要做.现在我想知道在这种情况下我会通过使用ActionFilter将帽子转换为23,该ActionFilter查看作为id传入的值是否为int(如果这样检查它是否存在于数据库中)或者是否是字符串看起来数据库中是否传入了字符串的id是什么.在任何一种情况下,如果未找到匹配,我希望将用户重定向到不同的操作. 首先是我命名正确的方法,其次是从ActionFilter中进行重定向是可行的. 干杯 解决方法更改您的签名以接受字符串.然后检查id的值是否为int.如果是,则按ID查找,如果不按名称查找.如果找不到匹配项,请执行重定向.public class TypeController
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult View(string id)
{
Product product = null;
int productID = -1;
if (int.TryParse( id,out productID))
{
product = db.Products
.Where( p => p.ID == productID )
.SingleOrDefault();
}
else
{
product = db.Products
.Where( p => p.Name == id )
.SingleOrDefault();
}
if (product == null)
{
return RedirectToAction( "Error" );
}
...
}
}
我这样做的原因是,为了知道要应用哪些控制器/动作,框架将寻找与传入的路由数据的签名匹配的框架.如果您没有匹配的签名 – 在这种情况下,一个带字符串的字符串 – 在调用任何过滤器之前,您将获得异常.不幸的是,我不认为你可以有一个接受字符串而另一个接受一个字符串 – 在这种情况下,如果传递一个参数,框架将无法分辨哪一个应该匹配,至少如果它是一个数字,即.通过使其成为字符串参数并自行处理翻译,您可以让框架完成其工作,并获得所需的行为 – 无需过滤器. (编辑:日照站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC可以生成具有小写名称和id属性的
- Asp.Net 音频文件上传和播放代码
- 发布一款层次下拉列表控件
- asp.net-mvc-3 – 为MVC3应用程序配置Ninject的正确方法是什
- asp.net-mvc-4 – MVC 4 DropDownListFor错误 – 没有具有密
- asp.net(C#)禁止缓存文件不让文件缓存到客户端
- C#,.Net自动生成大写字母编码
- asp.net-mvc-3 – Azure网站上的RavenDb – 访问被拒绝
- ASP.NET API(MVC) 对APP接口(Json格式)接收数据与返回数据的
- asp.net – 在调用异步方法时不使用等待来防止死锁
- 如何在asp.net应用程序中找到i / o瓶颈
- asp.net mvc – 如何实现面包屑助手在asp.net mv
- asp.net – 将JSON数据解析为.NET对象的最佳方式
- asp.net-mvc – 已经使用相同的参数类型定义了一
- asp.net-mvc – 在IIS 5.1上部署ASP.NET MVC(Win
- 如何单元测试我的asp.net-mvc控制器的OnActionEx
- asp.net错误表单不能嵌套在元素表单中?
- asp.net – 如何使用resxresourcewriter写入所有
- asp.net-mvc-3 – MVC 3不显眼的验证 – 有条件地
- asp.net下创建、查询、修改带名称空间的 XML 文件
