如何将剑道UI下拉选择的值的ID传递到控制器?(how to pass the ID of the

2019-06-27 05:27发布

我想创造一个我使用KENDO UI下拉的应用程序。 问题是我想从我的观点到数据库中更新值。 在下拉列表中的任何值的选择与它相关的ID应被传递到控制器用于所需数据库更新用。 但这里的下拉列表中的任何选择的ID通过“零”作为值到控制器。

我的看法

@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();
        }
    }
}

请帮助!

Answer 1:

我会建议你使用DropDownListFor(),然后还请确保请将.Name属性的名称相匹配。 你的情况:

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


Answer 2:

晚上好,

有可能是你正在填充变量的类型问题使用下拉列表(从这里开始,简称为后盾变量)。

我也遇到过你的问题,这个问题是我的后盾变量是一个可空INT(如int?)。 当你拥有的数据类型的属性“INT?” 作为你的后盾变量值将始终进来空的HttpPost控制器的操作方法 - 少你做一两件事:把它传递给视图之前指定属性的值。 例如,我的资料通常具1开始并增加,所以通常将其发送到视图之前分配为空的背衬变量为0。 这样,当提交页面,该模型包含下拉列表中为此事所选择的值,并且不为空,或者0。

它好像如果属性为null,当涉及到视图剑道下拉菜单将提交一个空值。

我只是没有使用“DropDownListFor”作为上述海报建议..所以我不认为这会对你有很大帮助,可惜注意到。



Answer 3:

我有同样的问题,因为我使用一个ViewModel我动弹不得DropDownListFor。 抢选定值你将不得不动用到的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个月大,但我希望这将帮助像我这样谁也找不到的答案,这在任何地方。



Answer 4:

有两种方法来获取值:

WAY1:在剑道下拉添加。价值(型号=> model.FieldName),该值将自动绑定。

Way2:转到控制器:

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

    return View();
}


Answer 5:

我会先重命名下拉名称“RegionId”,如由尼克·皮尔斯回答提出的。

然后,你可能需要像这样添加一些下拉列表:

.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>

这样做可以为我工作在一个剑道网格创建一个新的行。 这里显然是一个已知的bug剑道用下拉菜单时,不改变自己的价值,如果他们是为空的值,按照我的理解。 看到的只是上面的“你完成了”在这个网站: http://www.sitereq.com/post/kendo-mvc-dropdown-lists-inside-inline-kendo-mvc-grids



文章来源: how to pass the ID of the kendo Ui dropdown selected value onto the controller?