Asp.net mvc 5 所选组合框的值未添加到viewmodel

Asp.net mvc 5 所选组合框的值未添加到viewmodel,asp.net-mvc-5,kendo-grid,Asp.net Mvc 5,Kendo Grid,我在剑道上使用MVC。单击剑道网格的“添加”按钮将打开一个弹出对话框。模式对话框包含一个包含两个组合框的字段。当用户在这些字段中输入值并单击“添加”按钮时,我正在填充Viewmodel。我使用GetLanguages()和GetCountries()操作方法填充组合框。因此,这两个组合框不使用viewmodel填充。我已在视图中设置viewmodel的模型字段。例如 @using System.Collections @model CC.GRP.MCRequest.ViewModels.User

我在剑道上使用MVC。单击剑道网格的“添加”按钮将打开一个弹出对话框。模式对话框包含一个包含两个组合框的字段。当用户在这些字段中输入值并单击“添加”按钮时,我正在填充Viewmodel。我使用GetLanguages()和GetCountries()操作方法填充组合框。因此,这两个组合框不使用viewmodel填充。我已在视图中设置viewmodel的模型字段。例如

@using System.Collections
@model CC.GRP.MCRequest.ViewModels.UserProfileViewModel
@(Html.Kendo().ComboBoxFor(model => model.DefaultLanguageCode)
选择组合框不会向viewmodel添加值。如果我做错了什么,有人能告诉我吗。我是否需要在视图模型中添加国家/地区的列表集合,并在将其发送到视图之前在控制器中填充视图模型中的集合。如果是这样的话,我该怎么做呢。下面是我的代码

        <div class="editor-label">
            @Html.LabelFor(model => model.Forename)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Forename)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Surname)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Surname)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.PreferredName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.PreferredName)
        </div>

      <div class="editor-field">
    @(Html.Kendo().ComboBoxFor(model => model.DefaultLanguageCode)
     //   .Name("LanguageCode")
        .HtmlAttributes(new { style = "width:300px" })
        .DataTextField("LanguageName")
        .DataValueField("DefaultLanguageCode")
        .DataSource(dataSource => dataSource
        .Read(read => read.Action("GetLanguages", "Admin").Type(HttpVerbs.Post))
        )
    )
</div>
<div class="editor-label">
    @Html.LabelFor(model => model.DefaultCountryCode)
</div>
<div class="editor-field">
    @(Html.Kendo().ComboBoxFor(model => model.DefaultCountryCode)
     //   .Name("CountryCode")
        .HtmlAttributes(new { style = "width:300px" })
        .DataTextField("Country")
        .DataValueField("DefaultCountryCode")
        .DataSource(dataSource => dataSource
        .Read(read => read.Action("GetCountries", "Admin").Type(HttpVerbs.Post))
        )
    )
</div>

<div class="editor-label">
    @Html.LabelFor(model => model.TimeZoneName)
</div>
<div class="editor-field">
    @(Html.Kendo().ComboBoxFor(model => model.TimeZoneName)
     //   .Name("TimeZoneID")
        .HtmlAttributes(new { style = "width:300px" })
        .DataTextField("TimeZoneName")
        .DataValueField("TimeZoneID")
        .DataSource(dataSource => dataSource
        .Read(read => read.Action("GetTimeZones", "Admin").Type(HttpVerbs.Post))
        )
    )
</div>
屏幕


尝试删除您在组合框上输入的名称,这可能会阻止DefaultLanguageCode正确映射到viewModel属性,因为您调用了组合框LanguageDD

@(Html.Kendo().ComboBoxFor(model=>model.DefaultLanguageCode)
//.Name(“LanguageDD”)数据源
.Read(Read=>Read.Action(“GetLanguages”,“Admin”).Type(HttpVerbs.Post))
)
)

您是否尝试添加断点并单步执行代码,以查看您的进展情况?你的控制器方法有效吗?get action方法都很有效。当“添加”对话框打开时,将填充组合框。只有在保存异常发生时,我才会收到null异常错误,表示语言和国家/地区字段为null Ha!你可以发布你的保存操作和异常消息吗?我已经更新了我的发布操作。错误消息是语言和国家为空,我在postGood Catch中也添加了repository方法!这就是Telerik推荐的修复方法。我已经按照您的建议做了,它添加到了网格中,但是添加的是代码。我需要显示组合框的值。我已经更新了post.DataValueField(“LanguageName”)@Tom你能展示一下你的网格声明吗?如果将列绑定到DefaultLanguageCode,是否使用简单的
column.bound(m=>m.DefaultLanguageCode)
column.ForeignKey(“DefaultLanguageCode”,LanguagesInASelectList)
 public ActionResult GetLanguages()
        {
            return Json(MCRHelper.GetLanguages(), JsonRequestBehavior.AllowGet);
        }

        public ActionResult GetCountries()
        {
            return Json(MCRHelper.GetCountries(), JsonRequestBehavior.AllowGet);
        }

        public ActionResult UserProfile_Read([DataSourceRequest]DataSourceRequest request)
        {
            var users = mcrRepository.GetUserProfileById(0).AsQueryable().ProjectTo<UserProfileViewModel>();
            var response = users.ToDataSourceResult(request);
            return Json(response, JsonRequestBehavior.AllowGet);
        }



 [HttpPost]
        public ActionResult UserProfile_Create([DataSourceRequest] DataSourceRequest request, UserProfileViewModel userVM)
        {

            if (!ModelState.IsValid)
            {
                return null;
            }

            if (userVM.UserProfileID == 0)
            {
                mcrRepository.CreateUserProfile(Mapper.Map<UserProfile>(userVM));
                return Json(mcrRepository.GetTeams().ToDataSourceResult(request));
            }
            else
            {
                mcrRepository.UpdateUserProfile(Mapper.Map<UserProfile>(userVM));
            }
            return null;


        }
public void CreateUserProfile(UserProfile userProfile)
        {
            if (MCRHelper.UserValidate() == 1)
            {
                var userProfiles = db.spInsertUserProfile(userProfile.EmployeeID,
                                                          userProfile.Forename,
                                                          userProfile.Surname,
                                                          userProfile.PreferredName, 
                                                          userProfile.DefaultLanguageCode,
                                                          userProfile.DefaultCountryCode, 
                                                          userProfile.TimeZoneID, 
                                                          userProfile.Domain, 
                                                          userProfile.NetworkID, 
                                                          userProfile.EmailAddress, 
                                                          true,
                                                          MCRHelper.GetShortname());
            }
        }
@(Html.Kendo().ComboBoxFor(model => model.DefaultLanguageCode)
        //.Name("LanguageDD") <-- here
        .HtmlAttributes(new { style = "width:300px" })
        .DataTextField("LanguageName")
        .DataValueField("LanguageCode")
        .DataSource(dataSource => dataSource
        .Read(read => read.Action("GetLanguages", "Admin").Type(HttpVerbs.Post))
        )
    )