2010-09-08 38 views
2

我的ViewModel中有一些字段,我只需要在View中輸出。但是在提交表單時他們總是被髮送。這不僅令人討厭,而且也是危險的,因爲我絕對不希望這些視圖模型字段的數據綁定。OneWay Databinding for ViewModel

對於我的一些viewmodel屬性定義OneWay Databinding是否有任何改變?

THX提前

編輯:

問題IST,這些照片和ValidSizes列表被髮送回服務器,當我點擊一個ActionLink的。

http://localhost:52176/?PageSize=30&Index=31&Pictures=System.Collections.Generic.List%601[System.String]&Size=100&ValidSizes=System.Collections.Generic.List%601[System.Web.Mvc.SelectListItem]

public class PicturesViewModel 
{ 
    public const int SMALL = 100; 
    public const int MIDDLE = 150; 
    public const int BIG = 250; 

    public int PageSize { get; set; } 

    /// <summary> 
    /// Initializes a new instance of the <see cref="PicturesViewModel"/> class. 
    /// </summary> 
    public PicturesViewModel() 
    { 
     Pictures = new List<string>(); 
     Size = SMALL; 
     Index = 1; 
     PageSize = 30; 
    } 

    /// <summary> Gets or sets the index. </summary> 
    public int Index { get; set; } 

    /// <summary> 
    /// Gets or sets the picture links. 
    /// </summary> 
    /// <value>The picture links.</value> 
    public List<string> Pictures { get; private set; } 

    /// <summary> 
    /// Gets or sets the size. 
    /// </summary> 
    /// <value>The size.</value> 
    public int Size { get; set; } 

    private List<SelectListItem> validSizes = null; 

    /// <summary> 
    /// Gets the valid sizes. 
    /// </summary> 
    /// <value>The valid sizes.</value> 
    public IEnumerable<SelectListItem> ValidSizes 
    { 
     get { 
      if (validSizes != null) 
       return validSizes; 

      validSizes = new List<SelectListItem> 
      { 
       new SelectListItem(){Text = "Small", Value = SMALL.ToString()}, 
       new SelectListItem(){Text = "Middle", Value = MIDDLE.ToString()}, 
       new SelectListItem(){Text = "Big", Value = BIG.ToString()} 
      }; 

      return validSizes; 
     } 
    } 
} 

EDIT2:

<div id="pager_left"> 
     <%= Html.ActionLink("Prev", "Prev", Model)%> 
    </div></td> 

這就是操作鏈接引起的結合。

+0

請提供您的查看代碼。數據綁定僅適用於請求參數。請求參數使用視圖中的表單字段創建。 – Christian13467 2010-09-08 08:00:49

回答

1
  1. 使用形式輸入
  2. 使用IEnumerable的而不是List單獨視圖模型
  3. 用[綁定(排除= 「圖片ValidSizes」)]的動作輸入參數
  4. 使用私人設置器
  5. 如果您不需要它們,請不要爲圖片/ ValidSizes創建表單輸入元素

等等。

更新:

您不同的視圖模型不分配到一個視圖,但到處理鏈接點擊控制器動作。從你的問題看,你需要的不是「單向」綁定,而是避免URL中的額外字符 - 因爲,如果你的ValidSizes是IEnumerable它不會被改變,並且無論如何在你的URL中它的數據是錯誤的,不會導致更新 - 因此它已經是「單向」綁定。

這是我能找到你的問題: http://forums.asp.net/t/1328683.aspx

至於解決辦法,我從來沒有使用ActionLink的幫手自己,因爲它是一個漏水的抽象,我不喜歡與它戰鬥。簡單的html鏈接標籤總是好得多。

<a href="<%= Html.BuildUrlFromExpression<>() %>" /> 

我實際上使用我自己的幾行版本的BuildUrlFromExpression。另請參閱上面的鏈接,瞭解如何通過匿名對象而不是模型傳遞參數(new {PageSize = Model.PageSize,index = Model.index})。

+0

1)如何將不同的ViewModel分配給視圖? 2.)ValidSizes 已經使用IEnumerable。 3.)與沒有相同的結果。 4)他們已經在使用私人定製者。 5.)我沒有爲它創建任何表單元素 - 至少不是用於圖片。我唯一要做的就是調用ActionLink。 – BitKFu 2010-09-08 08:50:13

+0

啊太棒了!特別是匿名班的提示幫助了我很多。 – BitKFu 2010-09-08 10:14:26