如何从URL传递数据到控制器的字段?

时间:2016-12-08 16:54:16

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我知道如何将数据作为参数从URL发送到控制器的操作方法。在这里,我想知道如何将数据从URL发送到控制器的字段?

:published

让我们定义路线:

public MyAwesomeController : Controller {
    public string SectionCode { get;set; }
}

我希望SectionCode用URL中的{code}填充。有可能实施吗?

2 个答案:

答案 0 :(得分:1)

是的,您可以从基本的Controller类创建继承的类并覆盖OnActionExecuting方法,您可以在其中读取URL,路由或任何表单数据并将它们存储在会话中或直接填充您需要的任何字段。然后创建一个继承的控制器类。

public class MyAwesomeController : MyControllerBase
{
    public ActionResult Index()
    {
        //this.SectionCode is available populated here
        return View();
    }
}

public class MyControllerBase : Controller
{
    public string SectionCode
    {
        get;
        private set;
    }

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        this.SectionCode = filterContext.RequestContext.RouteData.Values["code"].ToString();
        base.OnActionExecuting(filterContext);
    }
}

每次使用您提供的路径定义点击此控制器中的任何操作时,将自动填充字段。但是当你定义了多条路线时,它们很容易陷入冲突,例如。当代码与任何控制器名称匹配时。普通网站不应该这样工作。

答案 1 :(得分:0)

您的路线应如下所示:

routes.MapRoute(
        name: "AwesomeRouter",
        url: "{code}/{action}",
        defaults: new { controller = "MyAwesome", action = "Index" }
    );

然后应该将代码作为参数传递给操作。为了便于说明,我将它存放在视图包中:

public class MyAwesomeController : Controller
{

    public ActionResult Index(string code)
    {
        ViewBag.Code = code;
        return View();
    }
}

然后使用此网址:

http://somehost/4567/Index

如果您在视图中访问Viewbag属性:

@ViewBag.Code

您应该看到:

4567