ASP.NET Core 2.0中Url.Action返回空字符串问题求助
嘿,我之前在ASP.NET Core 2.0项目里也碰到过Url.Action返回空字符串的情况,折腾了好一阵才解决,给你几个靠谱的排查方向:
核对控制器与动作方法的拼写和配置
首先得确认你的控制器类是KalenderController(注意你代码里写的Kalende...是不是截断了,少了末尾的r?这很容易写错),而且EventsRead方法是公开的,最好显式加上[HttpGet]特性(虽然GET是默认行为,但显式声明能避免意外):public class KalenderController : Controller { [HttpGet] public IActionResult EventsRead() { // 这里写你的业务逻辑,返回JSON数据 return Json(new { message = "请求成功" }); } }确认视图上下文的正确性
确保Kalender.cshtml是KalenderController对应的视图(放在Views/Kalender/目录下),如果是共享视图或者跨控制器使用,一定要完整指定控制器名称:var myurl = '@Url.Action("EventsRead", "Kalender")';如果你的控制器在某个**区域(Area)**下,还要加上区域参数:
var myurl = '@Url.Action("EventsRead", "Kalender", new { area = "YourAreaName" })';检查路由配置是否正常
打开Startup.cs的Configure方法,确认默认路由模板包含控制器和动作的占位符,ASP.NET Core 2.0的默认路由应该是这样的:app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); });如果你用了属性路由,记得在
EventsRead方法上加上对应的路由特性,比如:[Route("Kalender/EventsRead")] [HttpGet] public IActionResult EventsRead() { // ... }快速调试验证
可以直接在视图里输出@Url.Action("EventsRead", "Kalender"),看看页面渲染后是不是空字符串;或者在浏览器控制台打印myurl的值,确认问题出在Url生成还是后续逻辑。另外,直接在浏览器地址栏访问/Kalender/EventsRead,如果能正常返回JSON,说明控制器动作没问题,问题大概率在视图的Url生成环节。
内容的提问来源于stack exchange,提问作者Mar Tin

