**我在 TeacherArea / Home / Index 之类的路径中有一个index.cshtml,其中我有以下actionlink:**
@Html.ActionLink("Edit", "EditTeachers", "Home", new { Area = "TeacherArea", id = item.id }, new { })
目的是编辑简单的表格行数据。 我的家庭控制器看起来像这样:
namespace DemoProject2MVC.Areas.TeacherArea.Controllers
[RouteArea("TeacherArea")]
[RoutePrefix("TeacherArea/Home")]
public class HomeController : Controller
{
return view();
}
[Route("EditTeachers")]
public ActionResult Edit(int id)
{
MyDBContext stn = new MyDBContext();
Teacher tchr = stn.Teacher.Where(a => a.id == id).FirstOrDefault();
return View(tchr);
}
**我还在区域内存在的控制器类的“TeacherAreaAreaRegistration”中设置了名称空间,如下所示:**
public class TeacherAreaAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "TeacherArea";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"TeacherArea_default",
"TeacherArea/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new[] { "DemoProject2MVC.Areas.TeacherArea.Controllers" }
);
}
}
我也有这样的global.asax:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
DataAccessLayer.StartUpClass.Start();
}
我的问题是: 索引操作方法在此提到的区域内正常调用。但是调用Edit Action方法的actionlink正在抛出404。
答案 0 :(得分:1)
我可能在MVC上有点生疏,但我认为如果你想在启动时混合基于属性的区域声明/路由与区域/路由注册,你需要确保以正确的顺序注册东西。
我注意到的另一件事是你在创业公司中永远不会打电话给RouteTable.Routes.MapMvcAttributeRoutes();
- 这是故意的吗?
如果您同时使用具有路由属性的区域和具有基于约定的路由的区域(由AreaRegistration类设置),则需要确保在配置MVC属性路由后发生区域注册,但是在默认约定之前 - 基于路线设定。原因是路由注册应该从最具体(属性)到更通用(区域注册)到雾通用(默认路由)进行排序,以避免通用路由通过过早匹配传入请求来“隐藏”更具体的路由。管道。
答案 1 :(得分:0)
也许你可以尝试Ajax方法..
return $.ajax({
type: 'POST',
url: '<URL you want>',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
data: JSON.stringify({ Id: id}),
success: function (data) {
...
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
...
}
});
和你的控制器
[HttpPost]
public JsonResult EditTeachers(int Id)
{
MyDBContext stn = new MyDBContext();
Teacher tchr = stn.Teacher.Where(a => a.id == id).FirstOrDefault();
return Json(tchr, JsonRequestBehavior.AllowGet);
}
调试可能更容易,因为您可以通过检查网络来查看Ajax请求的来源。
希望有所帮助