3

My limited knowledge concerning programming entails that in order to use a non-static method, you need to first create an instance of the class. In order to use static methods, you simply use the Class name with the method name. I'm doing the WebPages tutorials for on asp.net and I came across the following code which confused me:

@{
    var title = "";
    var genre = "";
    var year = "";

    if(IsPost){
        title = Request.Form["title"];
        genre = Request.Form["genre"];
        year = Request.Form["year"];

        var db = Database.Open("WebPagesMovies");
        var insertCommand = "INSERT INTO Movies (Title, Genre, Year) Values(@0, @1, @2)";
        db.Execute(insertCommand, title, genre, year);
        Response.Redirect("~/Movies");   
    }
}

I looked up the Redirect method of the Response class and it wasn't listed as static, which I'd assume to mean that it is an instance method. How am I able to use it without first creating an instance of the Response class?

4

4 回答 4

3

Razor 是 ASP.Net MVC 的视图引擎插件。

它为您做了很多事情,例如为您的页面视图生成动态代码。这意味着每个页面都有一个底层WebViewPage@{ ... }类,Razor 会自动从这些页面继承并与您在这些部分中拥有的代码合并。

这使您可以访问有助于与浏览器通信的几个属性,例如ResponseIsPostRequest等。我选择这三个只是因为它们在您发布的代码中使用。

因此,例如,与其编写代码,不如MyPage.Response.Write("test!");直接引用Response页面类的属性。例:Response.Write("test!");

Razor 足够聪明,知道这Response是底层类的属性并使用它。


Response属性是一个类型的对象HttpResponse。响应对象具有将数据(例如 html)写回客户端(浏览器)所需的一切。

Request属性是一种类型的对象,HttpRequest可让您访问从客户端发送到服务器的信息。例如Request.Form是 html 输入控件数据的集合(文本框、收音机、下拉列表...)。

IsPost很简单boolean,它告诉您页面是回发还是初始获取。

于 2013-03-22T01:26:48.963 回答
2

The Response instance is created automatically by the webpages framework.

于 2013-03-22T00:32:57.710 回答
1

您正在使用 razor,它是一个视图引擎。对于每个视图,都会生成一个新类,该类派生自一个基类。该基类具有某些实例属性和方法,例如Response,允许您在视图中使用它们。

于 2013-03-22T00:34:32.513 回答
0
Response.Redirect(@href("~/Movies"));
于 2016-12-05T03:15:54.933 回答