我的ViewModel中有一些字段,我只需要在视图中输出。但是在提交表格时他们总是收到发送。这不仅烦人,而且危险,因为我绝对不希望这些视图模型字段的数据绑定。
为我的某些viewmodel属性定义OneWay数据绑定是否有任何变化?
提前谢谢
编辑:
问题是,当我点击动作链接时,图片和ValidSizes List会被发送回服务器。
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 :(得分:1)
等等。
更新
您不将不同的ViewModel分配给视图,而是分配给处理链接点击的控制器操作。从您的问题看来,您所需要的不是“单向”绑定,而是避免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})。