asp.net mvc如何将视图模型和输入文本传递给控制器​​?

时间:2018-06-22 15:55:27

标签: javascript c# html razor

我正在尝试使用view model

下载文件

我正在尝试将<input type="text"中的actionlink和文本传递给控制器​​。但是我无法将输入文本传递给MVC控制器。我正在使用post,因为我似乎无法使用<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>

下载文件

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

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
}

这是控制者

{{1}}

2 个答案:

答案 0 :(得分:2)

您不能也不应像查询字符串中那样传递整个模型。呈现的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的操作方法来重建整个模型。

答案 1 :(得分:1)

尝试使用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);
});

让我知道这是否有帮助。