是否可以在ASP MVC中重用控制器?如果是这样的话?
也许重复使用不是正确的词。情况是我有一个菜单和子菜单导航栏如下所示(实际上还有另一个导航栏显示的内容) - 我知道配色方案需要一些工作
上方栏是从数据库中填充的,因此可能有多于或少于3个计划。
下栏始终具有相同的三个条目。无论选择哪个计划,每个条目的视图都是相同的,尽管它们彼此不同。显然,它们中的数据是不同的(从不同的表中填充)。
Plan A -> Suggested Points
视图与Plan B -> Suggested Points
视图相同。
但Plan A -> Suggested Points
视图与Plan A -> Accepted Points
视图
为了对我打算使用部分视图的视图执行此操作,可以重复使用相同的视图文件。
但是,如何为控制器执行等效操作?
对于url路径,我想要的是: /玻璃体/ SuggestedPoints / PlanB / SuggestedPoints
在我看来,我只想让Plan
链接设置一个变量,告诉Points
视图他们应该连接哪个数据库。这可能是错误的思考方式,我怀疑它与上面的网址路径建议不符。
答案 0 :(得分:1)
建议的方法
我建议最好在路线中包含控制器名称,这样您就不会轻易与应用中的其他控制器发生冲突。
您可以修改RouteConfig.cs文件并映射新路线。确保在之前添加自定义路线"默认"之一。
这样的事情:
routes.MapRoute(
"Plans",
"Plans/{planName}/{action}",
new { controller = "Plans", action = "Index" }
);
// Default route here.
然后你会有一个名为Plans
的控制器,你的每个动作都有一个名为planName
的参数,可以让你识别出可以使用的计划......
public class PlansController : Controller
{
public ActionResult SuggestedPoints(string planName)
{
// create your view here, using the planName to get the correct data.
}
public ActionResult AcceptedPoints(string planName)
{
// create your view here, using the planName to get the correct data.
}
// etc.
}
此方法将允许使用以下格式的网址:
/Plans/PlanA/SuggestedPoints
,/Plans/PlanA/SuggestedPoints
,/Plans/PlanB/AcceptedPoints
,/Plans/PlanB/AcceptedPoints
等。
注意:如果您的计划在您的数据库中,那么为计划使用ID可能更有利,但URL看起来不那么友好,这取决于您。
最后,当您想在视图中创建链接时,可以使用以下内容:
@Html.RouteLink("link text", "SuggestedPoints", new { controller = "Plans", planName = "PlanA" })
您的确切请求
如果绝对必须使用您建议的网址格式,那么您可以执行以下操作,这需要为每个操作指定路由,但要小心您需要依赖Action的唯一性名称,以确保他们不与其他控制人发生冲突......
routes.MapRoute(
"SuggestedPoints",
"{planName}/SuggestedPoints",
new { controller = "Plans", action = "SuggestedPoints" }
);
routes.MapRoute(
"AcceptedPoints",
"{planName}/AcceptedPoints",
new { controller = "Plans", action = "AcceptedPoints" }
);
routes.MapRoute(
"RejectedPoints",
"{planName}/RejectedPoints",
new { controller = "Plans", action = "RejectedPoints" }
);
// Default route here.
在这种情况下,控制器将保持与我上面的第一个建议相同。这将允许URL如下:
/PlanA/SuggestedPoints
,/PlanA/SuggestedPoints
,/PlanB/AcceptedPoints
,/PlanB/AcceptedPoints
等。
答案 1 :(得分:0)
可能是这样的:
public class PlanController
{
public ActionResult SuggestedPoints(string plan) //or int planID
{
return View();
}
public ActionResult AcceptedPoints(string plan) //or int planID
{
return View();
}
public ActionResult RejectedPoints(string plan) //or int planID
{
return View();
}
}
和示例网址:
/Plan/SuggestedPoints/PlanA
/Plan/AcceptedPoints/PlanB