我正在开发名为的控制器,最终需要项目编号和步骤编号
所以http://myapp/at/5/step/6意味着使用Project = 5和Step = 6
我不想处理所有案件,例如:
http://myapp/at(尝试查找数据库中使用的最后一个项目)
http://myapp/at/1(尝试在项目1的DB中找到步骤)
下面的作品,但我是否比必要的更难?
public class ATController : Controller
{
[Route("at/{project:int}/step/{step:int}")]
public ActionResult Index(int project, int step)
{
var m = new ATViewModel();
m.Project = project;
m.Step = step;
return View(m);
}
[Route("at/{project:int}")]
public ActionResult ProjectSuppliedNoStep(int project)
{
var p = project;
var s = 33; //fake lookup
return RedirectToAction("Index", new { project = p, step = s });
}
[Route("at")]
public ActionResult NoProjectNoStep()
{
var p = 7; //fake lookup
var s = 33;
return RedirectToAction("Index", new { project = p, step = s });
}
}
顺便说一下,这不是一个单元测试。 ProjectSuppliedNoStep 和 NoProjectNoStep 始终返回null。我认为这是因为它正在调用RedirectToAction。
答案 0 :(得分:0)
可以有多个-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
if ([season selectedRowInComponent:0] == 6) {
matches = [[NSMutableArray alloc] initWithCapacity: 20];
[matches insertObject:[NSMutableArray arrayWithObjects:@"aaa", @"bbb", @"1-0", @"15-03-2010", nil] atIndex:0];
} else if
.
.
.
[self.tableView reloadData];
}
属性。也许你可以将这个与参数选择结合起来吗?
self
答案 1 :(得分:0)
您可以阅读Attribute Routing in ASP.NET MVC 5以更好地了解它。
参考上面的控制器看起来像......
[RoutePrefix("at")]
public class ATController : Controller
{
//GET /at/5/step/6
[Route("{project:int}/step/{step:int}")]
public ActionResult Index(int project, int step) {
var m = new ATViewModel();
m.Project = project;
m.Step = step;
return View(m);
}
//GET /at/1
[Route("{project:int}")]
public ActionResult ProjectSuppliedNoStep(int project) {
var p = project;
var s = 33; //fake lookup
return RedirectToAction("Index", new { project = p, step = s });
}
//GET /at
[Route("")]
public ActionResult NoProjectNoStep() {
var p = 7; //fake lookup
var s = 33;
return RedirectToAction("Index", new { project = p, step = s });
}
}
以下是您的控制器的一些单元测试,测试时全部通过(绿色)。
[TestClass]
public class MvcControllerAttributeRouteTests : ControllerUnitTests {
[TestMethod]
public void Index_Should_Return_ViewResult_With_Model() {
//Arrange
int project = 5;
int step = 6;
var controller = new ATController();
//Act
var actionResult = controller.Index(project, step);
var viewResult = actionResult as ViewResult;
//Assert
Assert.IsNotNull(viewResult);
Assert.IsNotNull(viewResult.Model);
Assert.IsInstanceOfType(viewResult.Model, typeof(ATViewModel));
var viewModel = viewResult.Model as ATViewModel;
Assert.AreEqual(project, viewModel.Project);
Assert.AreEqual(step, viewModel.Step);
}
[TestMethod]
public void Project_Supplied_No_Step_Should_Redirect_To_Index() {
//Arrange
int project = 1;
var controller = new ATController();
//Act
var actionResult = controller.ProjectSuppliedNoStep(project);
var result = actionResult as RedirectToRouteResult;
//Assert
Assert.IsNotNull(result);
Assert.AreEqual("Index", result.RouteValues["action"], "the redirection was to at.index action");
Assert.AreEqual(project, result.RouteValues["project"]);
}
[TestMethod]
public void No_Porject_No_Step_Should_Redirect_To_Index() {
//Arrange
var controller = new ATController();
//Act
var actionResult = controller.NoProjectNoStep();
var result = actionResult as RedirectToRouteResult;
//Assert
Assert.IsNotNull(result);
Assert.AreEqual("Index", result.RouteValues["action"], "the redirection was to at.index action");
CollectionAssert.Contains(result.RouteValues.Keys, "project");
CollectionAssert.Contains(result.RouteValues.Keys, "step");
}
}