Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检测我的页面是否是回发的结果_C#_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# 如何检测我的页面是否是回发的结果

C# 如何检测我的页面是否是回发的结果,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,我在MVC3应用程序上有一个组合框。当一个新项目被选中时,它会按照我的要求进行回发。那里一切都很好。在这个过程中,我弹出一个查询字符串并在页面加载时读取它。当页面刷新时,它读取查询字符串并根据需要设置其他控件 但是,我需要检测页面何时重新加载,这是回发的结果,而不是第一次加载页面。这是因为当页面最初加载时,在有人从组合框中选择某个内容之前,一切都会变得一团糟 然而,该网站的新用户不会知道这一点,只会看到一片混乱 我知道MVC3应用程序没有ASP.Net那样的iPostBack,而且由于各种原因,

我在MVC3应用程序上有一个组合框。当一个新项目被选中时,它会按照我的要求进行回发。那里一切都很好。在这个过程中,我弹出一个查询字符串并在页面加载时读取它。当页面刷新时,它读取查询字符串并根据需要设置其他控件

但是,我需要检测页面何时重新加载,这是回发的结果,而不是第一次加载页面。这是因为当页面最初加载时,在有人从组合框中选择某个内容之前,一切都会变得一团糟

然而,该网站的新用户不会知道这一点,只会看到一片混乱

我知道MVC3应用程序没有ASP.Net那样的iPostBack,而且由于各种原因,我不明白,我知道它在某种程度上不被认为是“可接受的”

然而,我只是想知道是否有一种100%保证可靠的方式来区分页面首次加载和回发,就像在ASP.Net中那样。如果有这样一种方法,它是什么?我如何实现它

我见过其他的帖子也这么做:

    public bool IsPostBack
    {
        get
        {
            return ViewBag.IsPostBack = (Request.HttpMethod == "POST");
        }
    }
但我在其他地方读到,这总是正确的。因此,如果这始终是真的,那么在第一次加载时也是真的,因此,我无法可靠地判断这是否是回发。我当然知道这是某种回帖。但如果它是第一次加载,则不是


有谁能帮我回答这个问题吗。另外,我使用的是Razor视图引擎,而不是标准的aspx视图引擎。

正如您所说,ASP.NET MVC中没有回发的概念。您要做的是测试用于执行请求的HTTP谓词,看看它是否是POST。这可能是在表单提交或AJAX请求之后:

public ActionResult Foo()
{
    if (string.Equals("post", Request.HttpMethod, StringComparison.OrdinalIgnoreCase)
    {
        // The POST verb was used to invoke the controller action
    }
    ...
}

您可以使用适当的属性装饰动作

[HttpGet]
public ActionResult Foo() { 
    //Do pre-postback stuff here 
}

[HttpPost]
public ActionResult Foo() { 
    //Do postback stuff here 
}

在MVC中,GET和POST通常有不同的操作:

[HttpGet] // Actions are GET by default, so you can omit this
public ActionResult YourAction(int id)
{
    // GET
}

[HttpPost]
public ActionResult YourAction(YourModel model)
{
    // POST
}

如果您遵循此模式,则无需担心类似于
页面的.IsPostBack
-属性。

asp.net中没有
回发
,mvcIt很想了解您是如何编写操作的。最常见的检测方法是:GET用于第一次请求(即,不是回发),而POST显然是回发您仍在考虑webforms体系结构中的应用程序。这很糟糕™. 你应该看看一些MVC3教程。实际上,这是有道理的!在过去的几个月里,我刚刚删除了这些属性,因为很多代码在两个地方重复。谢谢你的解释。事实上,我知道我会因为说这句话而被杀。但是如果他们想知道这一点,可以模拟IsPostBack属性。但我现在明白了为什么不需要一个了。我喜欢这个(现在也学会了如何使用string.equals),现在我只需要弄清楚为什么我会使用string.equals而不是myString==someOtherString。但那是另一个问题,除非你想帮我省事。谢谢你的回答。我会用这个作为公认的答案,但其他人提供了一个稍微好一点的解释。不过,我很感谢你抽出时间+1@jsmith如果说
Foo
已经存在于同一个上下文中,这难道不会给出一个错误吗?+1到@Md.Ibrahim的答案是错误的,因为重载是相同的。需要更改其中一个方法中Foo()的签名,以便区分它们。