2017-09-07 65 views
1

使用在很多地方我看到Nullable Int作爲參數控制器動作。我從SO研究中知道我應該把Model Propetry as Nullable and Required。它有助於防止Underposting攻擊,並且還可以幫助我們避免在UI窗體中看到屬性的「默認值」,例如datetime屬性。我什麼時候使用可空INT在我的控制器動作,什麼是它在asp.net mvc的5

[Required] 
public DateTime? dateTime {get;set;} 

隨着上面的設置,我現在不會看到默認的日期。到現在爲止還挺好。但是使用「?」的意義是什麼?在ControllerAction中?我什麼時候可以使用它。

目前,我有一個刪除的功能,我已經寫了下面的代碼

[HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Delete(int? resumeId) 
     { 
      var r = _context 
       .Resumes 
       .Where(c => c.ResumeId == resumeId).SingleOrDefault(); 
      _context.Resumes.Remove(r); 
      _context.SaveChanges(); 

      return RedirectToAction("ResumeCenter"); 
     } 

有人能指導我什麼時候需要使用的「?」這意義重大?我讀了這個Nullable Int鏈接,但我無法理解。請給我一個兩個用法的例子。

+0

根本沒有意義,因爲你的方法需要'resumeId'的值(如果它是'null',那麼什麼都不會被刪除)。將參數更改爲「int resumeId」。 –

+0

@StephenMuecke:你能不能告訴我一個真實世界的場景,我應該在哪裏使用它,我應該在哪裏避免它? – Unbreakable

+0

'resumeId'是一個用於查詢數據庫的操作參數。如果此參數可以爲空,則需要檢查傳遞給它的空值。使用不可爲空的int可能是明智的,因爲刪除操作需要一個ID來找到應刪除的相應記錄。 –

回答

1

在你的情況下使參數爲空值沒有任何價值。它是一種基於Id來刪除記錄的POST方法,因此您期望提供Id,並且null值是沒有意義的。

但是您應該做的是檢查當前用戶是否有權刪除具有Id的記錄,並在調用上下文刪除記錄之前檢查查詢返回的記錄不是null以便您防止惡意用戶(或其他用戶可能同時刪除相同記錄的情況)。

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Delete(int resumeId) 
{ 
    ... // check if the user has permission to delete the Resume with this id 
    var r = _context.Resumes.Where(c => c.ResumeId == resumeId).SingleOrDefault(); 
    if (r != null) 
    { 
     _context.Resumes.Remove(r); 
     _context.SaveChanges(); 
    } 
    return RedirectToAction("ResumeCenter"); 
} 

請注意,您鏈接到的例子是GET方法,它可適當有空的參數的,例如,用於過濾一組基於一個CategoryId記錄的方法,其中的null值表示迴歸所有的記錄,而不是隻返回匹配的記錄CategoryId

-1

好的,看這裏。你有路線是這樣的: ... /產品/更新ID = 0 所以如果param ID爲空或ID == 0創建其他產品更新的產品。

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Update(int? id=0) 
    { 
     if(id==0) create something else update 

     return RedirectToAction("ResumeCenter"); 
    } 

int? id = 0表示如果動作不採取任何參數id變爲等於0. 這意味着這個參數是可選的。

+0

我們是否需要將其設置爲0?它應該默認完成吧? – Unbreakable

+2

如果您將默認設置爲0,那麼Theres沒有使用可爲空的點 – senz

+0

如果您使用後無數據來../products/update操作將毫​​無例外地將id作爲空值。 – Manfice

0

我有時用它,在更復雜的控制器操作方法,其中有一個人做了或沒選擇的頁面上的東西的可能性。

在你要顯示別的東西,如果他們提供了一個int或沒有,而無需多頁這種情況下。

另一種說法可能是一個網頁(認爲:...控制器/產品ID = 7?),使人們可以在應用或社交媒體,後者部分是可以遺忘的共享(ID = XXX?)。在這種情況下,您會向可能的客戶顯示錯誤頁面。你想要做的是捕獲空值並將用戶重定向到概覽頁面,而不是特定的產品頁面。

,但其它人說和你感覺到,你比如它沒有很大的意義。

相關問題