2017-09-17 61 views
0

請參閱下面的代碼:應該所有的ActionResult參數都是可空的嗎?

[HttpPost] 
public ActionResult Details(Guid personID) 
     { 
      //do some work 
     } 

如果用戶瀏覽詳細信息沒有通過PERSONID,那麼應用程序錯誤。你如何處理這個問題?使用Web窗體我會在頁面加載開始時測試參數不爲空。但是,這對於MVC來說是不可能的。

+0

你是在談論你的GET操作還是後期操作方法?您已經在問題中顯示了httppost操作方法。 – Shyju

+0

@Shyju,我正在談論這兩者。我試圖瞭解如何處理空參數。 – w0051977

+0

你也可以在MVC中檢查它是否爲空。 –

回答

0

您可以使您的參數爲可空,並在訪問它之前檢查該參數是否爲空。

public ActionResult Details(Guid? personID) 
{ 
    if(personID!=null) 
    { 
     // use personID.Value 
    } 
    else 
    { 

    } 
    // to do : return something 
} 

對於你的http發佈動作mehod也可以這樣做。但是您需要爲http get和action方法提供唯一的方法簽名。所以我假設你在HttpPost操作方法中有更多的參數。

+0

應該可以使用ActionResult方法的可空參數嗎?有沒有這種情況下,他們不應該使用。 – w0051977

+0

這取決於。如果你的action方法總是得到一個參數值,那麼不需要使用可爲空的參數。例如,如果你有一個操作方法來獲取一個id並且使用id返回該實體的細節。如果它不是可以爲空的類型,那麼MVC框架會顯示一個錯誤,說明action方法需要一個id參數。但是,如果你可以爲空,框架不會拋出錯誤,但你需要在動作方法中進行空檢查並返回適當的響應。 – Shyju

+0

如果讓框架處理它,那麼用戶將被轉發到全局事件處理程序。是不是一種「可接受」的處理方式?謝謝。 – w0051977

0

有雙向,

首先使用Default值參數和檢查Guid.Empty

其次使用nulable參數和檢查HasValue屬性

默認參數樣品

[HttpPost] 
public ActionResult Details(Guid personID = Guid.Empty) 
{ 
    if(personID == Guid.Empty) 
    { 
     //do some work 
    } 
    else 
    { 
     // do some work 
    }   
} 

Nulable參數樣本

public ActionResult Details(Guid? personID) 
{ 

    if(personID.HasValue) 
    { 
     //do some work 
    } 
    else 
    { 
     // do some work 
    }   
} 
+0

應始終將可爲空的參數與ActionResult一起使用方法?有沒有這種情況下,他們不應該使用? – w0051977

+0

沒有必要使用它,以便參數不會爲空。你可以試試這個代碼嗎?我認爲這個代碼解決了這個問題。 –

0

你可以使用一個可空參數如下圖所示:

[HttpPost] 
public ActionResult Details(Guid? personID) 
{ 
    if(personID != null) 
    { 
     //do some work 
    } 

} 

所以,你可以調用使用正確的數據類型或空傳遞作爲參數的方法。

相關問題