如何将kendo Ui下拉选择值的ID传递给控制器​​?

时间:2012-08-21 11:54:56

标签: asp.net asp.net-mvc kendo-ui

我正在尝试使用KENDO UI Dropdown创建一个应用程序。问题是我想将视图中的值更新到数据库中。在选择下拉列表中的任何值时,应将与其关联的ID传递到控制器以进行所需的数据库更新。但是在这里,任何选择下拉列表的ID都会将“null”作为值传递给控制器​​。

我的观点

@using Kendo.Mvc.UI
@model ExamplekendoDropdown.Models.FacilityGroup

@{
    ViewBag.Title = "FacilityGroup";
}

<h2>FacilityGroup</h2>

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>FacilityGroup</legend>

        <div id="RegionName"  class="editor-label">
            @Html.LabelFor(model => model.RegionId)
        </div>
        <div class="editor-field">
           @* @Html.EditorFor(model => model.RegionName)*@
           @(Html.Kendo().DropDownList()
          .Name("Region")
          .DataTextField("RegionName")
          .DataValueField("RegionId")
          .DataSource(source =>
          {
              source.Read(read =>
              {
                  read.Action("GetRegion", "Fill");
              });

          })
    )
            @Html.ValidationMessageFor(model => model.RegionId)
        </div>
     <div id="Rest">
@*<form method="post" action='@Url.Action("Submit")' style="width:45%">
    <div>
        @(Html.Kendo().Upload()
            .Name("files")
        )
        <p>
            <input type="submit" value="Submit" class="k-button" />
        </p>
    </div>
</form>*@

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

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

        <div class="editor-label">
            @Html.LabelFor(model => model.CreationDate)
        </div>
        <div class="editor-field">
          @*  @Html.EditorFor(model => model.CreationDate)*@
          @(Html.Kendo().DatePicker()
              .Name("datepicker")
              .Value("17/08/2011")
              .HtmlAttributes(new { style = "width:150px" })
        )
            @Html.ValidationMessageFor(model => model.CreationDate)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
        </div>

    </fieldset>
}
        <div>
        @Html.ActionLink("See the List", "List")
        </div>
<div>
    @Html.ActionLink("Back to List", "About")
</div>
<script type="text/javascript">
    $(document).ready(function () {

        $("#RegionName").click(function () {
            $("#Rest").show();
        });
    });
</script>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

控制器: -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ExamplekendoDropdown.Models;

namespace ExamplekendoDropdown.Controllers
{
    public class FacilityGroupController : Controller
    {
        //
        // GET: /FacilityGroup/

        public ActionResult FacilityGroup()
        {
            return View();
        }
        [HttpPost]
        public ActionResult FacilityGroup(FacilityGroup objadd)
        {
            AMIEntities1 obj1 = new AMIEntities1();
            Facility objtbl = new Facility();

                objtbl.RegionId = Convert.ToInt16(objadd.RegionId);
                objtbl.FaclityGroupName = objadd.FaclityGroupName.ToString();
                objtbl.Status = objadd.status;
                objtbl.CreationDate = objadd.CreationDate;

                obj1.AddToFacilities(objtbl);
                obj1.SaveChanges();
                obj1.AcceptAllChanges();


            return View();
        }
    }
}

请帮助!!

5 个答案:

答案 0 :(得分:3)

我建议你使用DropDownListFor(),然后确保.Name匹配属性的名称。在你的情况下:

 @(Html.Kendo().DropDownListFor(model => model.RegionId)
      .Name("RegionId")
      .DataTextField("RegionName")
      .DataValueField("RegionId")
      .DataSource(source =>
      {
          source.Read(read =>
          {
              read.Action("GetRegion", "Fill");
          });
      })
  )

答案 1 :(得分:0)

晚上好,

使用下拉列表填充的变量类型(从此处开始,称为支持变量)可能存在问题。

之前我遇到过你的问题,问题是我的支持变量是一个可以为空的int(例如int?)。当你有一个data-type属性“int?”作为您的支持变量,该值将始终为空HttpPost控制器操作方法 - 少做一件事:在将属性传递给视图之前为其赋值。例如,我的ID通常从1开始并增加,因此我通常在将可变后备变量发送到视图之前将其分配给0。这样,当提交页面时,模型包含下拉列表的选定值,而不是null,或者就此而言为0。

如果属性在视图中为null,似乎Kendo下拉将提交null值。

我刚注意到你没有使用“DropDownListFor”,因为上面的海报建议..所以我不认为这对你有很大的帮助。不幸的是。

答案 2 :(得分:0)

我有同样的问题,我无法移动到DropDownListFor,因为我正在使用ViewModel。要获取所选值,您将不得不进入ModelState。所以你的代码看起来像这样:

[HttpPost]
    public ActionResult FacilityGroup(FacilityGroup objadd, string Region)
    {
        AMIEntities1 obj1 = new AMIEntities1();
        Facility objtbl = new Facility();

            objtbl.RegionId = int.Parse(Region);
            objtbl.FaclityGroupName = objadd.FaclityGroupName.ToString();
            objtbl.Status = objadd.status;
            objtbl.CreationDate = objadd.CreationDate;

            obj1.AddToFacilities(objtbl);
            obj1.SaveChanges();
            obj1.AcceptAllChanges();


        return View();

因为在HttpPost期间,视图会将完整的表单发送回控制器,并且由于Html.Kendo()。DropDownList呈现为输入,因此字符串“YourControlName”将是下拉列表中的选定值。

我意识到这个问题已经超过8个月了,但我希望这会帮助像我这样无法在任何地方找到答案的人。

答案 3 :(得分:0)

有两种方法可以获得价值:

Way1:添加.Value(model =&gt; model.FieldName)  在kendo下拉列表中,该值将自动绑定。

Way2:转到Controller:

public ActionResult Create(FromCollection collection)
{
    var id = collection["ComboName"]; // Here you can get the selected value

    return View();
}

答案 4 :(得分:0)

我首先将下拉名称重命名为&#34; RegionId&#34;,如Nick Pearce的答案所建议。

然后,您可能需要在下拉列表中添加以下内容:

.Events(events =>
{
    events.Save("dropdown_Save");
})

然后这个JavaScript函数:

<script type="text/Javascript">
    function dropdown_Save(e) {
        var regionId = $("#RegionId").data().kendoDropDownList.value();
        e.model.set("RegionId", regionId);
    }
</script>

通过在Kendo网格中创建新行,这样做对我有用。显然有一个已知的Kendo bug在没有改变它们的值的情况下有下拉,如果它们是可以为空的值,我理解它。见上面&#34;你完成了#34;在此网站:http://www.sitereq.com/post/kendo-mvc-dropdown-lists-inside-inline-kendo-mvc-grids