asp.net mvc - category / 1 to category / fruit ...正确的方法?

时间:2010-10-11 21:59:23

标签: asp.net-mvc

假设我有3个类别1,2,3,名为水果,蔬菜和谷物。

现在我有domain.com/category/1,它会把我带到水果的页面等等......

现在我想将domain.com/category/fruit带到水果的页面,因为它看起来更好,类别很少像最多3或4 ...所以我不打算看数据库看看categoryid是指什么名称。

我应该使用全局枚举/数组吗? (任何例子?)

这看起来很奇怪,因为我有一个列出所有类别的下拉列表,我查看该类别的选定整数值(假设为1)并将其传递给Category ActionResult,然后actionresult查看“fruit”和然后将它转换回1 ...所以我来回走动只是为了让URL看起来不错,这让我想知道我是不是 应该在global.asax中为此做一些URL路由?

或许我应该使用web.config来声明fruit = 1等等......?

我猜有几种方法可以做到这一点,但我想知道最有效的方法。

2 个答案:

答案 0 :(得分:0)

我做的事情如下:

/category/1/fruit
/category/2/vegetable

{action}/{id}/{*extra}

你可以按自己的方式去做,但是你必须像你说的那样去做。如果您正在进行数据库查找,可能需要索引该字段。

在保存id值的情况下,您不必索引字段,也不必进行奇怪的查找。你唯一丢失的是人们猜测你的其他类别名称并手动输入。真正关心的唯一一个人就是你。

如果你真的不想要这个号码并且不想处理数据库,只需创建一个Hashtable将“id”转换为值:

var categories = new Hashtable();
categories.Add("fruit", 1);
categories.Add("vegetable", 2);

然后使用水果[id]来取回你的号码。

答案 1 :(得分:0)

为什么需要将字符串(categoryName)转换回int(categoryId)?为什么不使用字符串来获取所需的数据:

服务电话:

Data GetDataByCategoryName(string categoryName)
{
   return repository.GetSingle(x => x.CategoryName == categoryName);
}