【问题标题】:@Html.BeginForm Post value from dropdown Change event instead of a submit button@Html.BeginForm 从下拉更改事件而不是提交按钮发布值
【发布时间】:2014-10-17 10:48:58
【问题描述】:

我正在尝试在我的 MVC 项目中实现“优化”选项。

在我看来,我有类似的东西

+-------------------------------------------------+
|                       ______                    |
|               SELECT:| 1 |▼||                   |
|                                                 |
+-------------------------------------------------+

用户可以从下拉列表中选择一个数字。

然而,为了发布这个,它需要一个“提交按钮”:

+-------------------------------------------------+
|                       ______                    |
|               SELECT:| 1 |▼||      [GO]         |
|                                                 |
+-------------------------------------------------+

有没有什么方法可以删除这个“GO”按钮,以便当我从下拉列表中选择一个值时它会自动将此值发送到控制器?

查看

<a style="font-size:large;font-weight:bold; padding-bottom:50%"> 
Select:@Html.DropDownList("Number") <input type="submit" value="GO" id="subBtn" /></a> 

控制器

 public ActionResult Index(string Number)
 {

  if(!String.IsNullOrEmpty(Number))
        var bays = db.Bays.Include(b => b.Product);
        {
            int t = Convert.ToInt32(Number);
           bays = bays.Where(x => x.ID == t);  
        }

  var Number = new List<int>();

  var choice = from x in db.Bays
                orderby x.ID
                select x.ID;

  Number.AddRange(choice.Distinct());

  ViewBag.Number = new SelectList(Number); //populates list
  return View(bays.ToList());
  }

所以基本上,我的查询是“下拉菜单是否也可以作为选择更改时的“提交”,如果可以,如何实现?'

【问题讨论】:

  • 您可以使用 javascript/jquery 来完成(处理下拉列表的更改事件并提交表单)
  • 我真的不知道@StephenMuecke - 我已经避开了他们,因为他们太不可靠了 - 一个小错误并且网站变得无用:( -另外,我更喜欢在任何一天工作服务器端而不是客户端,以及stuff like this
  • 你的服务器代码中的一个错误“并且网站变得毫无用处”!如果您正在开发网站,请学习 javascript。
  • 调试服务器代码要容易得多,你必须承认!然后,由于这是一个查看库存水平/等的公司/管理站点,因此使站点“花哨”并不是规范的一部分。
  • 没那么难。 Debugging javascript。它通常与性能有关,而不仅仅是让网站“花哨”

标签: html asp.net-mvc model-view-controller form-submit


【解决方案1】:

是的,你可以这样做。
1. 使用您要处理帖子的操作创建一个表单,并将下拉列表保留在表单内。
2. 为下拉菜单设置 ID,例如“productCounter”。
3.根据下拉onchange事件创建jquery函数。
4. 在该函数中触发表单提交动作。

$("#productCounter").change(function(){
    $("form[0]").submit();
});

【讨论】:

    【解决方案2】:

    您应该按如下方式更改您的代码:

    @Request.ServerVariables["REQUEST_METHOD"]
    <hr />
    
    @using(Html.BeginForm())
    {
    <a style="font-size:large;font-weight:bold; padding-bottom:50%"> 
    Select: @Html.DropDownList("Number", null, null, new { onchange="document.forms[0].submit();" })</a>
    }
    

    我添加了@Request.ServerVariables["REQUEST_METHOD"] 位,只是为了在您更改选择选项后看到该页面已发布。

    【讨论】:

      【解决方案3】:

      如果您使用的是 ASP.NET MVC,那么您肯定需要学习一些 javascript/jQuery 技能。由于 DropDownList 是简单的 razor 语法,并且在客户端呈现为 HTML,因此您必须使用 ajax 将数据从客户端发送到服务器。

      <script type="text/javascript">
          $(function () {
              $(document).on("change", "#number", function () {
                  var form = $("#YourFormName"); //post your form for all the input of form
                  //var number=$(this).val();
                  $.ajax({
                      url: '@Url.Action("Index")',
                      data: form.serialize(), // data:{Number:number}, if you want to send  value of dropdownlist only
                      success: function () {
                          //logic for success
                      },
                      error: {
                          //logic for error
                          //logger
                      }
                  });
              });
          });
      </script>
      

      【讨论】:

      • MVC 不需要 javascript/jquery 技能,但可能有用。至于您的回答,OP 不必必须使用 ajax。
      【解决方案4】:

      这是我使用的示例

      查看

      @using (Html.BeginForm("Index", "Home", FormMethod.Post))
                  {
                      @Html.DropDownList("month", null, new
                  {
                      onchange = @"submit();"
                  })}
      

      控制器

      public ActionResult Index(int month)
      {
      ViewBag.month= new SelectList(new SelectList(
            Enumerable.Range(1, 12)
                .Select(r => new
                {
                    Text = new DateTime(1, r, 1).ToString("MM"),
                    Value = r.ToString()
                }),
            "Value", "Text", "").ToList(), "Value", "Text", month.ToString());
      return View();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-30
        • 2018-07-27
        • 1970-01-01
        • 1970-01-01
        • 2016-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多