2012-01-06 79 views

回答

3

看看TryUpdateModel()MSDN article found here)。你可以指定你想要什麼方法的黑名單和白名單,以實際更新:

public ActionResult MyUpdateMethod (MyModel myModel) 
{ 
    if (ModelState.IsValid) 
    { 
     var myDomainModel = new DomainModel(); 
     if (TryUpdateModel (myDomainModel, 
          new string[] { /* WhiteList Properties here */ }, 
          new string[] { /* BlackList Properties here */ }) 

     { 
      // Save it or do whatever 
      return RedirectToActionV (/* Yada */); 
     } 
    } 

    return View (myModel); 
    } 
} 

伴隨着的是,我會確保你的發佈模式不包含字段您希望用戶更新,儘管可以使用手工製作的表單文章重寫該內容。這至少可以幫助您確保您不會意外地將字段放在您不想編輯的頁面上。

1

如果你不想領域爲可編輯爲什麼讓他們在首位編輯表單編輯?使用兩個獨立的視圖模型。一個用於顯示所有必要數據的GET請求。只讀數據將只是文本/標籤。第二個視圖模型將用於POST/PUT請求,其中只傳遞可以編輯的數據。

如果出於任何情況下,你需要一些數據來往返式操作可以將它們放置到隱藏字段,並用散列使用2隱藏字段。你可以像(僞代碼)那樣得到散列:

ComputeSHA1(dataValue.ToString() + salt); 

這個鹽是祕密值,只有你的應用程序知道。當數據往返於您的應用程序時,您將再次計算哈希(您必須使用相同的鹽)並將其與請求中存儲的哈希進行比較。如果這兩個不同,用戶試圖操縱那些隱藏的領域。

0

而不是實現您的基本模型的編輯操作使要編輯的所有字段,創建一個只包含與您想編輯的字段一個獨立的模型。此ViewModel方法更安全,避免了必須始終指定諸如白名單/黑名單方法之類的屬性列表的問題。

查看更多信息:How to Preserve/Protect Certain Fields in Edit in ASP.NET MVC