我正在使用MVC5
和Kendo UI
jquery
工作。我已经使用数据源绑定了一个多选文本框,并且在按钮上单击我想将所有选定的值传递给控制器操作方法参数。这是我的代码。
在我看来:
$("#multiselect").kendoMultiSelect({
dataSource: dataSource,
dataTextField: "fullName",
dataValueField: "Email",
select: onSelect
});
var selectedValues = [];
function onSelect(e) {
var dataItem = this.dataSource.view()[e.item.index()];
selectedValues.push(dataItem.Email);
}
$("#btnshare").click(function () {
var txtVal = selectedValues;
window.location.href = "@Html.Raw(@Url.Action("ShareEmail", "Share", new { @multiselectemail = ViewBag.multiselectemail }))";
});
IN控制器:
[HttpGet]
public ActionResult ShareEmail(string multiselectemail)
{
return null;
}
但我从来没有在参数中获取值。我错过了什么?任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:1)
好吧,我更喜欢使用更改事件并保存multiSelectList中的每个更改。无论如何,我的方法也可以用于按钮点击。
$("#btnshare").click(function () {
var data = JSON.stringify({
selectedValues: $("#multiselect").data("kendoMultiSelect").value() // it returns all selected items
});
RunAsynchronousRequest("/ControllerName/ActionName", data, function (json) {
//here I usually show some notification about success
});
});
请注意, RunAsynchronousRequest 是共享js文件中的帮助器方法,它只运行ajax请求,如下所示
function RunAsynchronousRequest(url, data, successCallback, errorCallback) {
jQuery.ajax({
contentType: 'application/json; charset=utf-8',
url: url,
data: data,
type: "POST",
cache: false,
success: function (json) {
successCallback(json);
},
error: function (data) {
errorCallback(data);
}//,
//async: false // in case you want it synchronously
});
}
按钮点击时执行的代码也可用于多选列表的更改事件。
控制器看起来就像你知道的那样..
[HttpPost]
public JsonResult ActionName(int[] selectedValues)
{
//your code
}
答案 1 :(得分:0)
由于您要传递多个项目,因此无法通过查询字符串发送。你应该使用HttpPost发布它。
要通过HttpPost发布此内容,您可以执行此类解决方法。
第1步:在页面中创建虚拟表单(如果您还没有表单)
@using (Html.BeginForm("CreateStudent","Home",FormMethod.Post,new { id="myForm"}))
{
<input id="btnSubmit" type="button"/>
}
第2步:当您从多文本框中获取所有电子邮件时,请在表单中创建一个名为emails
的输入字段,并将其附加到表单中。然后提交表格。
var items = ["shyju","scott"];
$.each(items, function(ind, item) {
$("#myForm").append("<input type='text' name='emails' value='" + item + "' />");
});
//Submit the form
$("#myForm").submit();
现在我们需要确保我们的action方法接受一组字符串作为参数。 参数名称应与我们为隐藏元素指定的名称相同。
[HttpPost]
public ActionResult ShareEmail(List<string> emails)
{
// do something with the emails
return View(emails);
}