加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 带有MVC 2的自定义ViewModel强类型HTML Helper在Crea

发布时间:2020-12-16 07:31:11 所属栏目:asp.Net 来源:网络整理
导读:我在尝试使用自定义视图建模创建表单创建实体时遇到了麻烦.下面是我的类别创建表单的自定义视图模型. public class CategoryFormViewModel{ public CategoryFormViewModel(Category category,string actionTitle) { Category = category; ActionTitle = acti
我在尝试使用自定义视图建模创建表单创建实体时遇到了麻烦.下面是我的类别创建表单的自定义视图模型.

public class CategoryFormViewModel
{
    public CategoryFormViewModel(Category category,string actionTitle)
    {
        Category = category;
        ActionTitle = actionTitle;
    }

    public Category Category { get; private set; }
    public string ActionTitle { get; private set; }
}

这是UI的用户控件

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<CategoryFormViewModel>" %>

        <h2>
            <span><%= Html.Encode(Model.ActionTitle) %></span>
        </h2>
        <%=Html.ValidationSummary() %>
        <% using (Html.BeginForm()) {%>
        <p>
            <span class="bold block">Ba?l?k:</span>
            <%=Html.TextBoxFor(model => Model.Category.Title,new { @class = "width80 txt-base" })%>
        </p>
        <p>
            <span class="bold block">S?ra Numaras?:</span>
            <%=Html.TextBoxFor(model => Model.Category.OrderNo,new { @class = "width10 txt-base" })%>
        </p>        
        <p>
            <input type="submit" class="btn-admin cursorPointer" value="Save" />
        </p>
        <% } %>

当我点击保存按钮时,它不会为我绑定类别,因为我使用自定义视图模型和强类型的html帮助器,如此

<%=Html.TextBoxFor(model => Model.Category.OrderNo) %>

我的html源代码如下

<form action="/Admin/Categories/Create" method="post">
        <p>
            <span class="bold block">Ba?l?k:</span>
            <input class="width80 txt-base" id="Category_Title" name="Category.Title" type="text" value="" />
        </p>
        <p>
            <span class="bold block">S?ra Numaras?:</span>
            <input class="width10 txt-base" id="Category_OrderNo" name="Category.OrderNo" type="text" value="" />
        </p>        
        <p>
            <input type="submit" class="btn-admin cursorPointer" value="Kaydet" />
        </p>
        </form>

我怎样才能解决这个问题?

解决方法

您的视图模型需要没有参数的默认构造函数,并且您需要为每个属性设置公共集方法.默认模型绑定器使用公共setter填充对象.

默认模型绑定器遵循一些规则.它按以下顺序选择要绑定的数据:

>从帖子中形成参数
>由global.asax.cs中的路由定义定义的URL路由数据
>查询字符串参数

然后,默认模型绑定器使用几种策略绑定到操作方法中的模型/参数:

>确切名称匹配
>与prefix.name匹配,其中prefix是父类,name是子类/ property
>没有前缀的名称(只要没有冲突,您不必担心提供前缀)

您可以使用“绑定”属性中的多个选项覆盖行为.这些包括:

> [Bind(Prefix =“someprefix”)] – 强制映射到由前缀标识的特定父类.> [Bind(Include =“val1,val2”)] – 要绑定的名称的白名单> [Bind(Exclude =“val1,val2”)] – 要从默认行为中排除的名称

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读