为啥我不能将url中的参数直接传递给我在MVC中的方法(参数始终为null)

Posted

技术标签:

【中文标题】为啥我不能将url中的参数直接传递给我在MVC中的方法(参数始终为null)【英文标题】:why can I not pass a parameter in the url directly to my method in MVC (the parameter is always null)为什么我不能将url中的参数直接传递给我在MVC中的方法(参数始终为null) 【发布时间】:2017-06-25 03:33:57 【问题描述】:

所以这些是 HomeController.cs 和 RouteConfig.cs。当我尝试编写 URL:localhost/Home/Index/Sometitle 时,该参数始终为空。当我编写 URL 时发生同样的事情:localhost/Home/Ajouter/SomeTitle。我已经尝试在互联网上找到答案,但没有成功。有人可以告诉我有什么问题或遗漏吗?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using Wiki.Models.DAL;

namespace Wiki.Controllers

    public class HomeController : BaseController //Controller
    
        Articles allArticles = new Articles();

        // GET: Home
        [HttpGet]
        public ActionResult Index(string title)
        
            if (String.IsNullOrEmpty(title))
                return View();
            else
                return RedirectToAction("Index", "Article", new  title = title );
        

        [HttpGet]
        public ActionResult Ajouter(string title)
        
            if (ModelState.IsValid)
                return RedirectToAction("Edit", "Article", new  title = title );
            else
                return View("Index");
        
    



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace Wiki

    public class RouteConfig
    
        public static void RegisterRoutes(RouteCollection routes)
        
            routes.IgnoreRoute("resource.axd/*pathInfo");

            //routes.MapRoute(
            //    name: "Wiki",
            //    url: "Wiki/titre/action",
            //    defaults: new  controller = "Wiki", action = "Index", titre = UrlParameter.Optional 
            //);

            routes.MapRoute(
                name: "Default",
                url: "controller/action/id",
                defaults: new  controller = "Home", action = "Index", id = UrlParameter.Optional 
            );
        
    

【问题讨论】:

请显示 Post to Ajouter 的视图 索引路由调用id,但你的参数调用title 【参考方案1】:

您需要将参数名称更改为Id:

public ActionResult Index(string Id)

或者用这个替换路由:

routes.MapRoute(
            name: "CustomName",
            url: "controller/action/title",
            defaults: new  controller = "Home", action = "Index", title = UrlParameter.Optional 
        );

我真正推荐的是阅读更多关于 MVC 中的路由

【讨论】:

【参考方案2】:

你的路由必须匹配控制器变量名试试这个。

    routes.MapRoute(
        name: "Default",
        url: "controller/action/title",
        defaults: new  controller = "Home", action = "Index", title = UrlParameter.Optional 
    );

【讨论】:

以上是关于为啥我不能将url中的参数直接传递给我在MVC中的方法(参数始终为null)的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能将常量数组作为参数传递?

在 MVC 3 中的 url 中传递多个参数

MVC - 将整个模型作为参数传递给 JavaScript 中的 Url.Action

Android - 将参数传递给 Android 应用程序中的 RESTful URL

为啥我不能直接将 int 或 bool 传递给 OCMock 的“andReturnValue”参数?

我应该将依赖注入容器(DIC)作为 MVC 中的参数传递吗?