簡體   English   中英

如何檢測我的頁面是否是回發的結果

[英]How do I detect if my page is the result of a postback

我在MVC3應用程序上有一個組合框。 當選擇一個新項目時,它會根據我的要求發回一個帖子。 一切都很好。 在這個過程中,我彈出一個查詢字符串並在頁面加載時讀取它。 頁面刷新時,它會讀取查詢字符串並根據需要設置其他控件。

但是,我需要檢測頁面何時重新加載,它是由於回發而不是第一次加載頁面。 這是因為當頁面最初加載時,一切都搞砸了,直到有人從組合框中選擇了一些內容。

然而,網站的新用戶不會知道這一點,只會看到一團糟。

據我所知,MVC3應用程序不像ASP.Net那樣具有相同的isPostback,並且由於各種原因我不明白,我知道它在某種程度上不被認為是“可接受的”。

但是,我只是想知道是否有100%保證可靠的方法來區分頁面首次加載和回發與ASP.Net中的方式相同。 如果有這樣的方式,它是什么,我該如何實現它。

我見過其他帖子這樣做:

    public bool IsPostBack
    {
        get
        {
            return ViewBag.IsPostBack = (Request.HttpMethod == "POST");
        }
    }

但我讀到其他地方,這總是如此。 因此,如果這始終是真的,那么在第一次加載時也是如此,因此,我無法可靠地判斷它是否是回發。 我當然知道這是某種回發。 但它不是第一次加載。

任何人都可以幫我解決這個問題。 此外,我使用Razor視圖引擎而不是標准的aspx視圖引擎。

在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
}

如果您遵循此模式,則無需擔心類似Page.IsPostBack的屬性。

正如你所說,ASP.NET MVC中沒有Postback的概念。 你冷酷的做法是測試用於執行請求的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 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM