我正在尝试使用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();
}
}
}
请帮助!!
答案 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