【问题标题】:How to Pass value from view to another controller in MVC ASP .NET如何将值从视图传递到 MVC ASP .NET 中的另一个控制器
【发布时间】:2018-12-08 10:09:24
【问题描述】:

我想将视图中下拉列表的选定索引传递给不同的控制器。 我使用 java 脚本来获取 dropdaownlist 的索引。我得到了索引。

但我想通过单击我的按钮将该索引传递给另一个控制器。

我该怎么做?

这是我的 Java 脚本片段

  $('#btnsubmit').click(function () {

        var deviceid = $('#ddldevice option:selected').val();

        $.ajax({
            type: 'GET',
            data: { deviceid: deviceid },
            url: '@Url.Action("ViewSensorTable","Home")',
            success: function (result) {


            }

        });

我的按钮代码

 <input type="submit" id="btnsubmit" value="Next" class="btn btn-primary btn-sm" />

这是我想要索引值的控制器

 public ActionResult ViewSensorTable(int id)
 {
     return View();
 }

编辑

$('#btnsubmit').click(function () {

    var deviceid = $('#ddldevice option:selected').val();

    $.ajax({
        type: 'GET',
        data: { id: deviceid },
        url: '@Url.Action("ViewSensorTable","Home")',
        success: function (result) {


        }

    });

【问题讨论】:

  • data: { id: deviceid } - 您发送到服务器的参数名称必须与服务器期望的参数名称匹配。否则它无法映射它。您也可以将$('#ddldevice option:selected').val(); 简化为$('#ddldevice').val(); - jQuery 将自动获取所选选项的值。
  • @ADyson 我这样做了,我明白了,但现在又发生了一个错误。参数字典包含“CalReport.Controllers.HomeController”中方法“System.Web.Mvc.ActionResult ViewSensorTable(Int32)”的不可空类型“System.Int32”的参数“id”的空条目。可选参数必须是引用类型、可空类型或声明为可选参数。参数名称:参数
  • @NeelDarji 在您进行 AJAX 调用时检查 deviceid 是什么。
  • @NeelDarji 我猜在这种情况下deviceid 为空,因此您向服务器发送一个空值。当然,在您的操作方法中,id 不允许为空。在你的 JavaScript 中做一些简单的调试来检查发生了什么。
  • 另一件不相关但有用的小事:public ActionResult ViewSensorTable(int id) { return View(); }——你不应该在这里返回整个视图——这将返回所有内容,包括带有完整 HTML 标签、头部、正文等的布局页面。这在响应 AJAX 请求时没有帮助。您应该返回少量 HTML(通过 Partia lView),可以插入到浏览器中现有的完整页面中,或者返回一些 JavaScript 可以读取和处理的 JSON 数据。您可以很容易地在线找到这两种设计的示例和教程。

标签: javascript jquery asp.net asp.net-mvc model-view-controller


【解决方案1】:

尝试将您的网址替换为

url: '@Url.Action("ViewSensorTable","Home")' + '/' + deviceid,

或者如果你的 Action 是 [HTTPPost] 那么你需要改变,

type: 'POST',

【讨论】:

    【解决方案2】:

    您需要通过 ajax 请求传递 deviceid。此外,Action Method 中的参数名称应与您使用 ajax 发送的参数匹配。试试下面的代码:

    查看

        <input type="submit" id="btnsubmit" value="Next" class="btn btn-primary btn-sm" />
    
        $('#btnsubmit').click(function () {
    
            var deviceid = $('#ddldevice option:selected').val();
            alert(deviceid);  //Comment it after testing
    
            $.ajax({
                type: 'GET',
                data: { id: deviceid },
                dataType: "json",
                url: '@Url.Action("ViewSensorTable","Home")',
                success: function (result) {
                   //do something with the result
                }
            });
    }
    

    控制器

    [HttpGet]
    public ActionResult ViewSensorTable(int id)
     {
         return View();
     }
    

    【讨论】:

    • 参数字典包含“CalReport.Controllers”中方法“System.Web.Mvc.ActionResult ViewSensorTable(Int32)”的不可空类型“System.Int32”的参数“id”的空条目.HomeController'。可选参数必须是引用类型、可空类型或声明为可选参数。参数名称:参数
    • deviceid有没有值?
    • 我不知道,我是 MVC 新手。
    • @ADyson 我在命中和试用时将它添加为深度对象作为通用解决方案。但是,如果只有单个值,您就混淆了。我会删除它。
    • 出于测试目的,我要求将值简单地发送为 '1' 以检查 ajax 调用是否正常工作。
    猜你喜欢
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 2016-12-28
    相关资源
    最近更新 更多