我正在尝试使用Kendo Grid来获取模型上的对象列表,但.Create()
等方法生成的url不能正确生成url。
它似乎不仅仅是Kendo,因为即使在我的控制器中使用Url.Action()
也会生成错误的网址。
// POST: Assessment/Create
[HttpPost]
[ValidateAntiForgeryToken]
[Route("eForms/Assessment/Create")] // <-- Tried with and without this
public ActionResult Create(AssessmentPoco model)
{
var x = Url.Action(("Allergy_Read", "Assessment");
}
//POST: Assessment/Allergy_Read
[HttpPost, ActionName("Allergy_Read")]
[Route("AllergyRead", Name = "Allergy_Read")]
public ActionResult Allergy_Read([DataSourceRequest] DataSourceRequest request, AssessmentAllergiesSection model) //, int id)
{
return Json(new[] { model }.ToDataSourceResult(request, ModelState));
}
预期:eForms/Assessment/Allergy_Read
实际:/?action=Allergy_Read&controller=Assessment
路线配置:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("");
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//web forms default
routes.MapPageRoute(
routeName: "WebFormDefault",
routeUrl: "",
physicalFile:"~/default.aspx");
routes.MapRoute(
name: "API",
url: "eforms/api/{controller}/{action}/{id}",
defaults: new {controller="Customer", action="GetCustomers", id = UrlParameter.Optional}
);
////mvc default
routes.MapRoute(
name: "Default",
url: "eforms/{controller}/{action}/{id}",
defaults: new { controller = "IncidentReports", action = "Search", id = UrlParameter.Optional }
);
}
不知道还有什么可能是错误的(除了我的大脑),还有什么想法?
澄清(来自评论):
更新: 该项目是现有ASP.Net WebForms应用程序新增的MVC项目。我更新了Route配置,因为我正在使用错误的配置。
答案 0 :(得分:1)
您正在使用routeAttribute,因此请在其中添加名称并使用Html.RouteLink或Url.RouteUrl而不是Url.Action()。
示例:
[Route("menu", Name = "mainmenu")]
public ActionResult MainMenu() { ... }
视图中的用法:
<a href="@Url.RouteUrl("mainmenu")">Main menu</a>
答案 1 :(得分:0)
我在控制器中尝试了这段代码:
public class HomeController : Controller
{
[Route("AllergyRead", Name = "Allergy_Read")]
public ActionResult Allergy_Read()
{
return View();
}
}
和: @ Html.RouteLink(&#34; Allergy Read&#34;,&#34; Allergy_Read&#34;)
给我正确的行动途径。我无法弄清楚你的实施工作为什么不起作用。