【问题标题】:MVC: Send parameters to method by a buttonMVC:通过按钮向方法发送参数
【发布时间】:2015-10-23 14:25:59
【问题描述】:

我在视图中有以下按钮

    <button id="Export" class="btn btn-default custom" type="button">
          <i class="glyphicon glyphicon-file"></i>Export to Excel
    </button>

我希望它导出我在ViewData 中的材料列表

我已经有逻辑了。代码可以在ActionResult 或普通方法中,它会是这样的:

    [HttpPost]
    public void Export(List<int> listPassed)
    {
           //stuff here
    }

我尝试添加href="@Url.Action("Export", "Materials", new { export_documentation = true })",但没有成功。

我可以通过覆盖ActionLink 方法来做到这一点,但我会丢失字形图标。我想避免的事情。 ActionLink 的覆盖也没有成功。

我尝试过 Ajax,但我现在不擅长 jscript 和 ajax 以及所有这些东西。

编辑

@using (Html.BeginForm("Export", "Materials",
         FormMethod.Post, new { listPassed = Request["SelectList"] }))
         {
         <button id="Export" class="btn btn-default custom" type="submit">
                <i class="glyphicon glyphicon-file"></i>Export to Excel
         </button>
         }

这行不通。

那么,怎样才能给方法发送参数呢?

【问题讨论】:

  • 使用表单提交值。使用 ViewData 参数对表单值进行编码。
  • 我如何从视图中请求这个变量ViewData["SelectList"] = HttpContext.Session["SelectList"] ?? new List&lt;int&gt;();

标签: html ajax asp.net-mvc html-helper


【解决方案1】:

如果您将列表添加到 ViewBag

[HttpGet]
public ActionResult MyView()
{
    ViewBag.SelectList = new List<int> { 1, 2, 3 };
    return View();
}

然后从您使用表单提交的视图中。您将需要 for 循环而不是 foreach,因为您需要索引 i 来识别列表项。

@{
    var list = ViewBag.SelectList as List<int>;
}

@using(Html.BeginForm("Export", "Materials", FormMethod.Post))
{
    for (var i = 0; i < list.Count; i++)
    {
       @Html.HiddenFor(m => list[i], new { Name="listPassed[" + i + "]" })
    }
    <button type="submit">Export to Excel</button>
}

将提交给您的操作

[HttpPost]
public ActionResult Export(List<int> listPassed)
{
    return RedirectToAction("Success");
}

【讨论】:

  • 我现在要离开办公室,但这看起来真的很好。我可以稍后给你我的反馈吗?我一到家就试试看。
【解决方案2】:

如果您的列表在 ViewData 中,则作为第三个参数传入的对象可以是您的列表,其名称与控制器签名指定的确切名称相同。

@Url.Action("Export", "Materials", new { listPassed= ViewData.myList })

当然,这将要求您使用锚点 &lt;a href="@Url..."&gt;...&lt;/a&gt; 而不是按钮,但这应该没什么大不了的。

Here's a link to relevant docs on MSDN

【讨论】:

  • 嗨@JDupont。我有个问题。 ViewData 没有 .myList。我想到了ViewData.Select(s =&gt; s.Value).ToArray() 之类的东西,但后来我发送了一个空列表。
  • 另外,我不能将&lt;button&gt; 元素嵌套在&lt;a&gt; 中。你能给我一些光吗?我不知道如何使 &lt;a&gt; 元素成为 &lt;button&gt;
猜你喜欢
  • 1970-01-01
  • 2017-07-04
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
相关资源
最近更新 更多