【问题标题】:How to Pass Kendo DropDownList DataTextField value to Controller如何将 Kendo DropDownList DataTextField 值传递给控制器
【发布时间】:2015-06-20 08:40:48
【问题描述】:

我在View 上有一个Kendo DropDownList,我想将其DataTextField 值传递给Controller,然后将它们传递到另一个View 的标签上。虽然我可以将DataValueField 值传递给Controller,但我不能传递DataTextField 值。我试图应用不同的场景,但我做不到。任何想法?另一方面,如果不可能,是否应该在Controller 上再次填充DataTextField 值并返回到另一个View

查看:

@model IssueViewModel

...
@Html.LabelFor(m => m.ProjectID)
@(Html.Kendo().DropDownList()
    .Name("ProjectID")
    .DataTextField("ProjectName")
    .DataValueField("ProjectId")
    .DataSource(source =>
    {
        source.Read(read =>
        {
            read.Action("GetProjects", "Issue");
        });
    })
)

控制器:

public JsonResult GetProjects()
{
    var projects = repository.Projects;
    return Json(projects.Select(m => new { ProjectId = m.ID, ProjectName = m.Description }), JsonRequestBehavior.AllowGet);
}


/* I want to pass the DataTextField values to this 
method and return them to the CreateManagement view */
public ActionResult Create(IssueViewModel issueViewModel)
{
    return RedirectToAction("CreateManagement", issueViewModel);
}

【问题讨论】:

  • @AmirHosseinMehrvarzi Selam Hossein。请问有什么回复吗?
  • 如果您在控制器上使用DataTextFields 而不是DataValueFields,那么为什么不像DataValueFields 那样枚举DataTextFields?
  • A <select> 只回发一个元素,所以您要发布选定的项目IDDescription 属性吗?
  • 那么您需要发布ID 属性(就像您现在所做的那样)。如果 POST 方法中还需要Description,则需要再次调用数据库。
  • 不确定我是否完全理解,但您可以使用 ajax 上传文件 - refer this answer

标签: asp.net-mvc kendo-ui kendo-asp.net-mvc html.dropdownlistfor kendo-dropdown


【解决方案1】:

把你的控制器改成这样:

public JsonResult GetProjects()
{
    var projects = repository.Projects;
    return Json(projects.Select(m => new SelectListItem { ProjectId = m.Description, ProjectName = m.Description }).ToList(), JsonRequestBehavior.AllowGet);
}

由于DropDownList 对用户使用DataTextField 并使用DataValueField 进行服务器通信,因此您必须对两者都使用DataTextField 值。 然后你就可以将它用于接下来的操作了。

编辑:如果您需要控制器上的两个值,请将JsonResult 方法更改为:

return Json(projects.Select(m => new SelectListItem { ProjectId = m.Description + "," + m.ID , ProjectName = m.Description }).ToList(), JsonRequestBehavior.AllowGet);

现在你可以在接下来的操作中使用它们,只需像这样吐出它们:

var _both = value.split(',');//value: returned value from the view

【讨论】:

  • 感谢您的回答。但我认为我还需要 DataValueField 进行下一个操作,以便我传递 id 来创建新记录。那么,它也能解决这个问题吗?
  • 那么你需要这两个值吗?
  • 是的。实际上 issueViewModel 保留了 DataValueField 值,但我不确定在应用您建议的更改后它是否仍然保留。我要试试吗?
  • 非常感谢您的帮助。投票+
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多