本篇体验自定义路由以及了解为什么需要自定义路由。
准备
□ View Models
using System.Collections.Generic;
namespace MvcApplication2.Models
{
//单位
public class Unit
{
public int ID { get; set; }
public RentalProperty RentalProperty { get; set; }
public string Name { get; set; }
}
//属性
public class RentalProperty
{
public int ID { get; set; }
public string Name { get; set; }
}
public class RentalPropertyTestData
{
public int ID { get; set; }
public List<RentalProperty> RentalProperties { get; set; }
public List<Unit> Units { get; set; }
}
}
□ 模拟一个数据层服务类
using MvcApplication2.Models;
using System.Collections.Generic;
namespace MvcApplication2.Service
{
public class RentalService
{
public RentalPropertyTestData GetData()
{
List<RentalProperty> rps = new List<RentalProperty>();
RentalProperty rp1 = new RentalProperty() { ID = 1, Name = "长度" };
RentalProperty rp2 = new RentalProperty() { ID = 2, Name = "重量" };
rps.Add(rp1);
rps.Add(rp2);
List<Unit> units = new List<Unit>();
Unit unit1 = new Unit() { ID = 1, Name = "米", RentalProperty = rp1 };
Unit unit2 = new Unit() { ID = 2, Name = "公斤", RentalProperty = rp2 };
units.Add(unit1);
units.Add(unit2);
return new RentalPropertyTestData()
{
ID = 1,
RentalProperties = rps,
Units = units
};
}
}
}
RentalPropertiesController
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Microsoft.Ajax.Utilities;
using MvcApplication2.Models;
using MvcApplication2.Service;
namespace MvcApplication2.Controllers
{
public class RentalPropertiesController : Controller
{
RentalPropertyTestData _data = new RentalPropertyTestData();
public RentalPropertiesController()
{
RentalService s = new RentalService();
_data = s.GetData();
}
public ActionResult All()
{
return View(_data);
}
public ActionResult RentalProperty(string rentalPropertyName)
{
var rentalProperty = _data.RentalProperties.Where(a => a.Name == rentalPropertyName).FirstOrDefault();
return View(rentalProperty);
}
public ActionResult Unit(string rentalPropertyName, string unitName)
{
var unit = _data.Units.Find(u => u.Name == unitName && u.RentalProperty.Name == rentalPropertyName);
return View(unit);
}
}
}
视图
□ All.csthml
展开
□ RentalProperty.cshtml
展开
□ Unit.cshtml
展开
效果
All.csthml
RentalProperty.cshtml
Unit.cshtml
路由改进目标
■ http://localhost:1368/RentalProperties/All 改进为 ~/rentalproperties/
■ http://localhost:1368/RentalProperties/RentalProperty?rentalPropertyName=长度 改进为 ~/rentalproperties/rentalPropertyName/
■ http://localhost:1368/RentalProperties/Unit?rentalPropertyName=长度&unitName=米 改进为 ~/rentalproperties/rentalPropertyNam/units/unitName
添加自定义路由规则
展开
□ 效果
http://localhost:1368/RentalProperties
http://localhost:1368/RentalProperties/长度
http://localhost:1368/RentalProperties/长度/Units/米
□ 参考博文