如何从Kendo ComboBox获取值并传递至Controller
如何将Kendo ComboBox选中值传递至ASP.NET Core Controller
一、修正前端代码
你当前的代码存在两处关键问题:一是同时存在kendo-combobox和同名input元素,会导致表单提交时参数冲突;二是combobox的name属性与ViewModel中的PShID不匹配,无法完成自动绑定。修正后的前端代码如下:
<div class="k-d-flex k-justify-content-center" style="padding-top: 54px;"> <div class="k-w-300"> <h4 style="text-align: center;">Customize your Projectship</h4> <label for="projectship">ProjectShip</label> <kendo-combobox id="combobox" datatextfield="Text" datavaluefield="Value" value="2" placeholder="Select ProjectShip..." suggest="true" filter="FilterType.Contains" asp-for="PShID" style="width:100%;" bind-to="data"> </kendo-combobox> </div> </div> </form>
关键调整说明:
- 移除重复的
input元素,避免参数冲突 - 添加
asp-for="PShID"属性,自动将combobox的name设置为与ViewModel属性一致的值,确保Model绑定生效 - 保留
datavaluefield="Value",保证提交的是选中项的Value值而非显示文本
二、确保ViewModel属性匹配
你的RegisterDischargeTonnageViewModel需包含PShID属性,且类型与ComboBox数据源中Value字段的类型一致(比如int或string):
public class RegisterDischargeTonnageViewModel { // 类型需与ComboBox的Value字段类型匹配 public int PShID { get; set; } // 其他业务属性... }
三、Controller接收参数
你现有的Controller代码无需额外修改,只要前端绑定正确,ASP.NET Core的Model绑定机制会自动将ComboBox选中的Value值赋值给model.PShID:
[HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> RegisterDischargeTonnage(RegisterDischargeTonnageViewModel model) { if (ModelState.IsValid) { await _projectship.RegisterDischargeTonnage(model); return RedirectToAction(nameof(Index)); } return View(model); }
额外验证要点
- 检查ComboBox的数据源是否正确加载,确保
Text和Value字段存在 - 如果提交后
model.PShID仍为空,可查看ModelState.IsValid的错误信息,排查类型不匹配或参数名称不一致问题
内容的提问来源于stack exchange,提问作者Hossein khakpour
相关产品推荐
相关产品推荐

