【问题标题】:asp.net mvc how can I pass the view model and input text to controller?asp.net mvc 如何将视图模型和输入文本传递给控制器​​?
【发布时间】:2018-06-22 15:55:27
【问题描述】:

我正在尝试下载带有html.actionlink(text, action, controller, reoute values, htmlattributes) 的文件

我正在尝试将view model<input type="text" 中的文本传递给控制器​​。但我无法将输入文本传递给 MVC 控制器。我正在使用actionlink,因为我似乎无法使用post 下载文件

如何将模型值和文本输入传递给控制器​​? 这是 HTML

<body>
    <div class="col-md-12 form-group centered">
        <div class="col-md-4"></div>
            <div class="col-md-4">
                <label for="quoted">Quoted:</label>
                <input type="text" class="form-control" style="width:300px" id="quoted">
            </div>
        <div class="col-md-4"></div>

        </div>
    <div class="col-md-12 text-center">
        @Html.ActionLink("Download", "GeneratePoExportDocument", "HealthCareExport", new {model = Model, quoted = "text box input goes here" }, new { @class = "btn btn-default", id="download-btn" })
    </div>

Are there other methods to download a file where I can pass in all the values?
</body>

这里是控制器

public FileResult GeneratePoExportDocument(MyModel model, string quoted)
{
  //my model has all of the values
  //quoted is null I don't know how to pass that in
}

【问题讨论】:

  • 您不能通过 actionlink 从视图向控制器提交值。它们必须通过表单元素提交。此外,string quoted 永远不会收到值,因为输入没有相应的 name 属性。
  • @M12Bennett 不是POST 的表格吗?可以这样下载文件吗?
  • 我想我会尝试这样的stackoverflow.com/questions/16670209/… 它可能有用。
  • 抱歉,我读错了问题,所以您只想将模型和字符串发送到下载文件的操作中。model 是否正确通过?
  • @M12Bennett 是的,但是我在传递文本框输入值时遇到了问题。

标签: javascript c# html razor


【解决方案1】:

您不能也不应该像在查询字符串中那样传递整个模型。呈现的 HTML 的一部分中的文本框,用户可以在那里输入任何值。因此,如果您想发送该数据,则必须使用 javascript 劫持链接的 click 事件,读取输入元素值并将其附加到查询字符串并通过设置 window.location.href 值导航到该 URL。

另一个(更可靠的恕我直言)选项是提交表单。如果您想发送视图模型的某些属性,可以将它们作为隐藏输入包含在表单中

<form action="@Url.Action("GeneratePoExportDocument","HealthCareExport")" method="post">

    @Html.HiddenFor(a => a.Id)
    @Html.HiddenFor(a => a.CartId)

    <label for="quoted">Quoted:</label>
    <input type="text" class="form-control" style="width:300px" name="quoted">
    <button type="submit">Download</button>
</form>

仅在操作方法中发送您绝对需要的属性。如果您只需要Id,请仅发送它。如果需要,也许您可​​以使用 Id 的操作方法重建整个模型。

【讨论】:

  • 感谢您的回答。我真的希望有一种更好的方法,看起来不那么“hacky”。​​
  • 表单提交是正确的方式。这不是hacky
【解决方案2】:

尝试使用 Javascript 执行此操作:

用这个替换你的 ActionLink:

<a href="@Url.Action('GeneratePoExportDocument', 'HealthCareExport', new {model = Model, quoted = 'placeholder'})" id='myLink'>Download</a>

然后在 javascript 中为文本框使用 blur 函数。

$("#quoted").blur(function() {
    var currentUri = $("#myLink").attr("href");
    var newUri = currentUri.replace("placeholder", $(this).val());
    $("#myLink").attr('href', newUri);
});

如果这有帮助,请告诉我。

【讨论】:

  • 谢谢,对于某些人来说,我似乎无法找到一种干净的方式来处理这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多