如何将值从视图传递给控制器​​的操作方法参数

时间:2015-12-11 05:54:12

标签: jquery kendo-ui asp.net-mvc-5 kendo-asp.net-mvc

我正在使用MVC5Kendo 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;
    }

但我从来没有在参数中获取值。我错过了什么?任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 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);
}