在MVC中,将模型属性传递给操作会自动检索该属性值吗?

时间:2017-04-19 10:53:01

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

假设我们有一个控制器cal Home,其行为为Index。该操作的关联视图也称为Index

现在假设我们有一个名为DataModel的模型,使用Index视图在@model ProjectName.Model.DataModel视图中使用Razor引用。现在,下面是类的声明:

模型

public class DataModel
{
   int property1 {get; set;}
   string ReturnURL {get ; set;}
}

控制器

public class HomeController :  Controller
{
    public ActionResult SomeAction(string returnUrl)
    {
        var model = new DataModel 
        {
            ReturnURL = returnUrl;
        }

        return View(model);
    }
}

调用SomeAction时,会传递一个字符串。我正在读一个tutorial,其中字符串的值不为空。我理解的是我们直接传递了一个DataModel对象但只有一个属性....我不明白它(我们也知道它的属性,因为它与属性的名称相同。 .upper / lower case不受尊重)

在本教程中,使用该单个字符串参数的操作在教程的第6部分中为LoginGetRedirectUrl ...

这就是为什么我询问是否将模型属性传递给某个动作会自动检索该属性值。或者,您可以从参数字符串returnUrl从哪里获取其值来解释我。

2 个答案:

答案 0 :(得分:1)

returnUrl的值来自模型绑定器。取决于您的路由设置方式。

它可以是查询字符串:

  

http://siteroot/someaction?returnUrl=YOUR_RETURN_URL_HERE

或通过路线

  

http://siteroot/someaction/YOUR_RETURN_URL_HERE

就像我说的那样取决于你的路线配置。还要记住,returnUrl需要进行http编码。

答案 1 :(得分:0)

如果您尝试访问标有[Authorize]属性且未登录的操作,则会将您重定向到设置为Configuration类的登录页面,并将其作为参数提供您是controller/action/网址,但您可以看到它已编码。

An example image here