2010-10-26 91 views
1

我有一個網站與ASP.NET MVC 1運行,並遇到了一個錯誤,其中我的模型中的布爾重置爲默認值,因爲該值未在視圖。如何停止視圖返回ASP.NET MVC中的默認值

爲控制器代碼:

public ActionResult Edit(Guid id) 
{ 
    Service service = GetService(id); 

    if (service == null) 
     return View("NotFound"); 

    return View(service); 
} 

當視圖代碼有:

<label for="IsActive"> Is Active: </label> 
<%= Html.TextBox("IsActive") %> 

它工作正常不過,一旦它被刪除isActive域總是返回假。我不再希望isactive被看到或從該視圖修改但去除它已經引起了值丟失,我已經嘗試設置值,而不是與

<% Html.TextBox("IsActive"); %> 

顯示,但仍然有其拖欠值爲false

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(Service service) 
{ 
    //UpdateLogic 
} 

在POST方法,無論什麼IsActive收到過處,Service.IsActive始終爲假

基本上我只是想知道我怎麼可以讓網站保持它的價值通過時不顯示文本框視圖(曾嘗試用Google搜索,但未能獲得話語權組合一個體面的結果)

回答

3

您可以將它作爲一個隱藏在頁面上:

<%= Html.Hidden("IsActive"); %> 
+1

謝謝你的完美(它需要等於工作,但除了它的偉大) - <%= Html.Hidden(「IsActive」)%> – Manatherin 2010-10-26 13:51:14

+0

這不是一個很好的方法來解決這個問題。無論如何,它將使編輯瀏覽器中的值非常容易,請檢查我的修復程序。 – Stefanvds 2010-10-26 13:54:44

+1

@Stefanvds - 我不喜歡你的修復。看起來你在控制器中放置了很多不應該在控制器中的邏輯。我比你更喜歡ViewModel方法。 – Martin 2010-10-26 13:56:52

2

一個快速的解決方案,您可以使用隱藏字段而不是文本框並將值存儲在那裏。

一般來說,如果你不想顯示或更新值,爲什麼把它發送到視圖?只使用視圖中實際需要的數據創建一個ViewModel並將其來回發送。

+1

我喜歡這種方法,很多工作,但我儘可能創建ViewModels。 – Martin 2010-10-26 13:49:33

-1

創建它作爲一個隱藏的價值:

<input id="IsActive" type="hidden" value="true" /> 
3

你可以將其隱藏在頁面上隱藏字段:

<% Html.Hidden("IsActive"); %> 

BUT!不建議這樣做。因爲操縱這個值非常容易,你不需要這個。

最好的方法就是從數據庫中獲取值。

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(Service service) 
{ 
    Service originalService = GetService(id); 

    UpdateModel(originalService, new string[] { "Field1thatyouwanttoupdate", "fieldname2" }); 
} 

這樣你更新所有你想要的字段,但不是IsActive字段。

+0

這應該被接受爲答案。只綁定實際允許用戶更新的字段。永遠不要相信用戶輸入 – 2010-10-26 14:02:16

+1

@Jace Rhea - 如果你只應該綁定你實際上允許用戶更新的字段,那麼這不是答案 - Yakimych關於ViewModels的回答是。 – Martin 2010-10-26 14:22:06

+0

@Martin對不起,但我不同意。通過明確說明在UpdateModel方法中綁定哪些字段(省略IsActive),IsActive字段將永遠不會更新。是的,你也可以創建一個單獨的viewmodel類,但這看起來像是額外的,不必要的工作。 – 2010-10-26 14:31:42