首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面向OneWay的ViewModel数据库

面向OneWay的ViewModel数据库
EN

Stack Overflow用户
提问于 2010-09-08 07:57:09
回答 1查看 1.1K关注 0票数 3

我的ViewModel中有一些字段,我只需要视图中的输出。但是在提交表单时,他们总是得到发送。这不仅令人讨厌,而且也很危险,因为我绝对不想为这些视图模型字段提供数据库。

对于我的视图模型属性,是否有任何更改来定义OneWay数据库?

Thx预先

编辑:

问题列表,当我单击一个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]

代码语言:javascript
复制
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:

代码语言:javascript
复制
    <div id="pager_left"> 
        <%= Html.ActionLink("Prev", "Prev", Model)%>
    </div></td>

这就是导致绑定的Action。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-09-08 08:36:22

  1. 对表单输入使用单独的ViewModel
  2. Use IEnumerable而不是List
  3. Use Bind(Exclude="Pictures,ValidSizes")操作输入参数
  4. 使用私有设置器
  5. 如果您不需要它们H 210G 211不要为图片/ValidSize创建表单输入元素

诸若此类。

更新:

不是将不同的ViewModel分配给视图,而是分配给处理链接单击的控制器操作。从你的问题上看,你需要的似乎不是“单向”绑定,而是避免在URL中增加字符--因为,如果你的ValidSizes是IEnumerable,它不会被修改,而且不管怎么说,在你的URL中它的数据是错误的,不会导致更新--所以它已经是“单向”绑定了。

这就是我对你的问题所能找到的:http://forums.asp.net/t/1328683.aspx

至于解决方案,我自己从来不使用ActionLink助手,因为它是一个漏洞百出的抽象,我不喜欢与它斗争。简单的html链接标记总是要好得多。

代码语言:javascript
复制
<a href="<%= Html.BuildUrlFromExpression<>() %>" />

为此,我实际上使用了我自己的几行BuildUrlFromExpression版本。还可以在上面的链接中看到如何通过匿名对象而不是模型传递参数(new { PageSize = Model.PageSize,index = Model.index })。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3665669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档