2012-11-18 59 views
0

我讨厌违反DRY规则。Asp.net的通用控制器Mvc

对于url:/ student/charles /Views/Student/Show.cshtml将使用学生模型进行呈现。

如何用asp.net mvc实现它?

(我可以从网址相关模型)

我想我已经解决了。我赶上这个代码的所有请求:

routes.MapRoute("CatchAll", "{*url}", 
      new { controller = "Base", action = "Dispatch" } 
     ); 

现在我想在调度程序中调用CustomView。

瞧:

public class BaseController : Controller 
{ 

    public ActionResult Dispatch(string url) 
    { 
     object model = null; 
     ..... 
     return View("~/Views/Student/Show.cshtml", model); 

    } 
}  

看起来很脏,但工程:)我打开任何好转implemantation。

+1

你不明白你在问什么。你能否多解释一下,发布相关的代码,给出任何适当的错误信息等? – mfanto

回答

2

我会承认,我不完全确定你想要完成什么。我首先不明白,如果你以正常的MVC方式实现它,你将如何违反DRY。

你会做这样的事情。

型号:Student.cs

public class Student { 
    public string StudentId { get; set; } 
    public string Name { get; set; } 
} 

控制器:StudentController.cs

public class StudentController : Controller { 

    public ActionResult Student(string id) { 
    // TODO: Get the student by ID and return the view displaying the student. 
    return View(student); 
    } 
} 

查看:Student.cshtml - 做一个强类型的视图,以学生模型(或视图模型) 。

非常简单,非常简单。你不需要弄乱路由(我不会建议所有的路由 - 我甚至不知道你买了什么)。当然,如果你想获得URL/Student/StudentName,你将需要一点点路由,但这也很简单。

同样,我只是拼出基本的MVC设置。我不确定你想要保留干什么 - 我没有看到任何你正在重复代码的地方。也许你可以澄清?

+0

但是,如果你有10-15类像学生,所有他们有相同的行为,如显示,编辑,删除,列表,索引...如果你有通用的数据访问层? – ozz

+0

@ozz - 当你说你有10-15个班级“喜欢”学生......这可能意味着很多事情。你的意思是你有其他需要CRUD工作的课程,但是他们自己的课程? (课程,教授等)如果是这样,他们根本不一样,应该分开。或者,你的意思是你有“外汇交换学生”,“新生学生”等?如果是这样的话,您可能需要考虑如何对数据进行建模,并在模型级别上进行抽象,而不是在控制器级别。 – JasCav

+0

课程,教授,课堂,学校,教师......如果您对所有人都有通用的数据访问层,您会像我一样思考。 – ozz