2013-02-05 53 views
0

我在mu模型中有一個屬性,其中我不希望用戶在編輯操作期間訪問其值。 如果我沒有在編輯視圖中包含它,它會得到一個空值。如果我將它作爲隱藏值包含在內,用戶可以通過瀏覽器中的「查看源代碼」選項查看它的值。忽略編輯視圖中的一個字段asp.net mvc 3

任何提示? 這裏是編輯動作

public ActionResult Edit() 
    { 
     Profile profile = null; 
     if (_db.Profiles.Count() > 0) 
      profile = _db.Profiles.Single(p => p.UserName == User.Identity.Name); 
     if (null == profile) 
      return RedirectToAction("Create"); 
     else 
      return View(profile); 
    } 
    // 
    // POST: /Profile/Edit/5 

    [HttpPost] 
    public ActionResult Edit(Profile newProfile) 
    { 
     try 
     { 
      TryUpdateModel(newProfile); 
      if (ModelState.IsValid) 
      { 
       _db.Entry(newProfile).State = EntityState.Modified; 
       _db.SaveChanges(); 
       if (newProfile.Confirmed) 
       { 
        return RedirectToAction("Index", "Home"); 
       } 
       else 
        return RedirectToAction("Confirm"); 
      } 
      else 
       return View(newProfile); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 
+0

你爲什麼不在你的[post]中賦值? – ShaneKm

+0

這是我的情景:當用戶在網站註冊時,我向他的手機發送一個4位數的驗證號碼。我將此驗證號碼包含在用戶的個人資料模型中。當用戶想要編輯他的個人資料時,我必須隱藏這個字段。 –

回答

0

這裏是一個解決方案。在註冊過程中,當在數據庫中創建新記錄時,爲該用戶創建一個新的GUID()字段。

new Guid() 

然後,無論何時用戶想要編輯他/她的配置文件,您都將該guid作爲URL參數之一。從數據庫中提取數據時,只需獲取與該GUID匹配的記錄即可。

var record = repository.FirstOrDefault(x => x.Guid == 'guid from url'); 

record =>將保存您的用戶數據。

這樣你就不會以任何方式顯示任何驗證號碼。

+0

感謝哥們。但這是我的模型。我正在使用mvc 3默認AccountController。我有一個模型「個人資料」,其中有「用戶名,FirsName,姓氏,手機,城市等字段...,驗證號「在編輯中,我使用」UserName「從dbContext加載數據,它將包括所有字段 –

+0

,在這種情況下,」username「必須是唯一的(不會有兩個相同的用戶名存在)。你的[get] action set verification number = null。並且在你的[post]中,你將知道根據用戶名更新哪個記錄 – ShaneKm

+0

thanks man。根據Ameen的說法,我必須使用一個新的Dbcontext來加載原始數據並更新只是某些領域。 –

0

在這種情況下,您正在編輯從數據庫中現有條目我ProfileController可代碼。所以,你可以:

  • 負載從數據庫中使用對象
  • 只覆蓋了一組你喜歡從你的POST
  • 沖洗獲得的模型,堅持價值的唯一標識現有數據對數據庫的更改

這樣,您不必在頁面中包含確認號碼。

+0

我正在使用實體框架和代碼優先模型。我是一個新手,我不知道如何「使用對象的唯一標識符從數據庫加載現有數據」。你能解釋一下如何獲得對象的唯一標識符嗎? –

+0

所以,我假設你手頭有一個DatabaseContext並且有一個主鍵ID用於所討論的對象。所以你可以做一些像'databaseContext.SetOfObjectsOfInterest.Find(uniqueId)'來從數據庫加載項目。然後你使用從POST獲得的一個(在你的控制器方法中),並且只覆蓋你從數據庫獲得的對象頂部的值,然後通過'databaseContext.SaveChanges()' – Ameen

+0

保存謝謝。當我在HttpGet方法中發送模型,並且用戶編輯文件並點擊保存按鈕時,該模型到目前爲止會返回到HttpPost method.ok?模型的新變更是否生效,我可以從上下文中獲取原始模型,並替換某些字段的新值? –

相關問題