MVC 3 DevExpress - 返回到控制器的模型为空

2024-04-10

问题确实很简单,但我似乎无法解决。我正在将 Razor 引擎与 DevExpress 组合框一起使用。

我有这个代码:

MODEL:

public class TestModel
{
    public string Name { get; set; }
    public List<Role> Roles { get; set; }
}

public class Role
{
    public int RoleId { get; set; }
    public string RoleName { get; set; }
}

控制器

    public ActionResult OpenTest()
    {
        TestModel tm = new TestModel( );
        tm.Roles = new List<Role>( );

        tm.Roles.Add( new Role( ) { RoleId = 1, RoleName = "Role 1" } );
        tm.Roles.Add( new Role( ) { RoleId = 2, RoleName = "Role 2" } );
        tm.Roles.Add( new Role( ) { RoleId = 3, RoleName = "Role 3" } );

        return View( tm );
    }

这里我可以成功打开视图,并且数据显示正常:

VIEW

@model TestDx.Models.TestModel
@{
    ViewBag.Title = "OpenTest";
}
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using ( Html.BeginForm( ) )
{
                        @Html.DevExpress( ).ComboBox(
                    settings =>
                    {
                        settings.Name = "TestDx.Models.TestModel.Roles";
                        settings.Width = 120;
                        settings.SelectedIndex = 0;
                        settings.Properties.DropDownWidth = 300;
                        settings.Properties.DropDownStyle = DevExpress.Web.ASPxEditors.DropDownStyle.DropDownList;
                        settings.Properties.EnableCallbackMode = false;
                        settings.Properties.CallbackPageSize = 30;
                        settings.Properties.IncrementalFilteringMode = DevExpress.Web.ASPxEditors.IncrementalFilteringMode.StartsWith;
                        settings.Properties.TextFormatString = "{0}";
                        settings.Properties.ValueField = "RoleID";
                        settings.Properties.ValueType = typeof( int );

                        settings.Properties.Columns.Add( "RoleID", "RoleID", 10 );
                        settings.Properties.Columns.Add( "RoleName", "RoleName", 100 );

                    } ).BindList( Model.Roles ).GetHtml( )
        <br />
            @Html.DevExpress().Button(
                    settings =>
                    {
                        settings.Name = "btnSave";
                        settings.ClientEnabled = true;
                        settings.ControlStyle.CssClass = "button";
                        settings.ClientVisible = true;

                        settings.Text = "save";
                        settings.UseSubmitBehavior = true;
                        settings.ControlStyle.Font.Bold = true;
                    }).GetHtml()
}

现在这一切都很简单,我并没有用它做任何事情,只是将它丢弃。但是当我单击“保存”按钮时,我回到控制器,回到这个方法:

[HttpPost]
        public ActionResult OpenTest( [ModelBinder( typeof( DevExpressEditorsBinder ) )]TestModel model )
        {
            if ( ModelState.IsValid )
            {
               //
            }

            return View( model );
        }

...这里的模型是空的,角色属性是 0。我不明白为什么会这样?事件组合框名称与其绑定到的属性相同,并且我确信使用推荐的 DevExpress 绑定器。

Thanks.


ComboBox 的名称列出了类型定义。因为你正在传入测试模型作为类型,ComboBox 的名称应该是保存角色 ID 的属性。所以活页夹正在尝试填充model.TestDx.Models.TestModel.Roles但找不到该字段,因此没有任何内容被填充。如果您查看 formCollection 对象,您应该会看到带有该值的 ComboBox。

更好的解决方案是RoleID指定于测试模型,并简单地命名 ComboBoxRoleID。在这种情况下,RoleID 应在您的保存中自动填充。或者,您可以在视图中指定“绑定”字段,例如:

 @Html.DevExpress( ).ComboBox(
                    settings =>
                    {
                        settings.Name = "TestDx.Models.TestModel.Roles";
                        settings.Width = 120;
                        settings.SelectedIndex = 0;
                        settings.Properties.DropDownWidth = 300;
                        settings.Properties.DropDownStyle = DevExpress.Web.ASPxEditors.DropDownStyle.DropDownList;
                        settings.Properties.EnableCallbackMode = false;
                        settings.Properties.CallbackPageSize = 30;
                        settings.Properties.IncrementalFilteringMode = DevExpress.Web.ASPxEditors.IncrementalFilteringMode.StartsWith;
                        settings.Properties.TextFormatString = "{0}";
                        settings.Properties.ValueField = "RoleID";
                        settings.Properties.ValueType = typeof( int );

                        settings.Properties.Columns.Add( "RoleID", "RoleID", 10 );
                        settings.Properties.Columns.Add( "RoleName", "RoleName", 100 );

                    } ).BindList( Model.Roles )
                       .Bind(model.RoleID).GetHtml( )

这可能适合您的绑定。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MVC 3 DevExpress - 返回到控制器的模型为空 的相关文章

  • ASP.NET MVC 中是否有嵌套母版页?

    我想知道 MVC 框架是否可以利用嵌套母版页 如果是这样 有人有一些关于如何实现这一目标的信息吗 我们经常使用嵌套母版页 以便将布局与标准包含和站点范围标记分开 如下所示 站长
  • UIHint 不使用 EditorTemplate

    我有一个这样的模型 public class MyModel ScaffoldColumn false public int CharityId get set UIHint Charities public SelectList Char
  • Asp.Net 捆绑不使用 .min 文件

    根据发布模式下的文档 捆绑程序应该使用 min js 文件 如果存在 我通过以下方式添加角度 bundles Add new ScriptBundle Bundles Scripts Include Content Scripts angu
  • ASP.NET Core/MVC 6 ViewModel 中的依赖注入 (DI)

    我使用构造函数注入在控制器中成功使用了 ASP NET 5 MVC 6 DI 我现在有一个场景 我希望我的视图模型在实现 IValidatableObject 时在 Validate 方法中使用服务 ViewModel 中的构造函数注入不起
  • ASP.Net MVC 3,复杂对象和延迟加载

    首先 我是 ASP Net MVC 3 的新手 而且我也在使用 EF 4 1 我有一个复杂的对象 类似于包含类别对象的产品对象 所以我们有 Product CategoryId Product Category 和一些额外的属性 我还有一个
  • 用户注销速度非常快

    我正在使用 ASP NET 身份成员身份 这是 Startup Auth cs 代码 app CreatePerOwinContext EFDbContext Create app CreatePerOwinContext
  • 实体类型 ApplicationUser 不是当前上下文模型的一部分。在项目开始时使用了两个不同的数据库

    我使用实体框架创建了一个 MVC 4 应用程序来读取数据并将数据写入我在 Azure 数据库上托管的数据库 Azure 数据库应该保存应用程序数据和应用程序的登录数据 但是 当我第一次创建应用程序时 我忘记删除到本地计算机的连接字符串 因此
  • 如何在 ASP.NET MVC 中手动设置用户角色?

    我正在从事的这个项目要求我保留管理员用户的本地数据库 并为普通用户使用外部数据库 在管理数据库中通过身份验证的任何人都应被分配 管理员 角色 而通过其他数据库进行身份验证的任何人将始终被分配 用户 角色 我可以手动分配这些角色吗 我不需要角
  • 具有 ASP.NET Identity 的 MVC 5 - 用户登录时获取声明

    我正在使用 OWIN 2 0 在登录用户后 我想从数据库中检索现有的声明 但如果我尝试获取用户的声明 它们将为空 如果我将相同的代码放入任何被调用的后续控制器中 那么声明就在那里 似乎只有在首次登录后的下一个请求之前 这些声明才可用 为什么
  • 从mvc url中隐藏一个控制器名称,显示其他控制器名称

    我有两个控制器 HomeController 和 ResourcesController 当请求对 HomeController 执行操作时 我想从 url 中隐藏 Home 但对于 ResourcesController 或任何其他 co
  • .net 4.7 中的依赖注入?

    我对 DI 有哪些集成选项有点困惑 我发现它对于 net core 对于我的特定项目 来说非常简单 但我不需要构建跨平台应用程序 也看不到使用 core 的优势 但是 net 框架应用程序似乎仍然使用 Global asax 设置且没有 S
  • ASP.net MVC 项目无法在 IIS 上编译

    我以前只是将 ASP NET 网站上传到实时服务器 IIS 会自动编译它们 但是 当我对 asp net MVC 项目执行相同操作时 我只是收到错误 并且我需要在上传项目之前发布 构建 项目 注意1 我使用的是VWD 2008 Expres
  • Owin 声明 - 添加多个 ClaimTypes.Role

    我有一个应用程序 可以在其中为用户分配以下角色 超级管理员 Admin User 一个用户可能分配了两个或多个角色 例如 超级管理员和用户 我的应用程序使用声明 因此我也想通过声明来验证用户角色 喜欢 Authorize Roles Adm
  • 服务层设计。将事物放入服务层的原因

    我有一些与设计相关的问题 should service layer interfaces居住在一个domain layer 例如user service 将代码部分移动到单独层的主要原因是什么 should service layer居住在
  • 如何使自定义错误页面在 ASP.NET MVC 4 中工作

    我想要显示 500 404 和 403 的自定义错误页面 这是我所做的 在 web config 中启用自定义错误 如下所示
  • 从 .Net MVC 视图获取 HTML,而不在浏览器中实际渲染视图?

    我的控制器中有一个 ActionResult 我想从中发送 HTML 电子邮件 该电子邮件的正文是由视图生成的 我可以在传递模型时获取视图的结果并避免将其发送到浏览器 而不是在控制器中使用 2 个 actionresults 方法吗 Mvc
  • 包括过滤器子集合[重复]

    这个问题在这里已经有答案了 我在为 LINQ 查询中包含的项目添加一些过滤条件时遇到一些困难 我的查询就像 var item Context Order Include Inner Include Inner first Include I
  • ASP.NET MVC 子操作的路由匹配

    子动作的路由匹配方法与普通动作有什么不同吗 换句话说 子操作是否有一些自动生成的 url 来进行与父操作类似的匹配 父级或子级动作处理没有区别 任何操作都遵循您在中设置的相同路线定义Application Start 这意味着父母的行为以及
  • 如何强制 Visual Studio 2008 生成 Designer.cs,例如不管怎样.aspx.designer.cs

    我在使用 Visual Studio 2005 使用网站技术生成的 Asp Net V2 0 中有一些 Web 表单 想要将它们导入到设置为 v3 5 Asp Net MVC 的 Visual Studio 2008 我在其中使用项目技术
  • ASP.NET MVC,控制器可以改变提交的值吗?

    ASP NET MVC 中是否允许更改提交的值 HttpPost public ActionResult Create Person toCreate toCreate Lastname toCreate Lastname A return

随机推荐