将数据从View传递到Controller-使用模型

时间:2019-01-25 17:30:58

标签: c# asp.net-mvc

我需要将一些信息从视图传递到控制器。

目前,我正在执行以下操作:

var url = '@Url.Action((object)@ViewBag.CompID, "Print", "DataRecords")' + '?location=' + model.Location + '&startDate=' + model.StartDateTime + '&endDate=' + model.EndDateTime;

window.location.href = url;

我想隐藏位置,开始日期和结束日期,以免显示在浏览器URL中。

我正在考虑创建一个如下所示的模型并将该模型发送到Controller,但不确定如何做。

var model = {
               Location: $('#Location :selected').val(),
               StartDateTime: $("#StartDate").val(),
               EndDateTime: $("#EndDate").val()
            };

请注意,在我的情况下,我不需要取回任何数据,因为Print方法可以进行打印。

除了使用

之外,我还乐于做到这一点
    window.location.href

如何使用AJAX做到这一点,因为我不需要返回任何数据的视图,因为Print方法动作将打印相应的视图。

2 个答案:

答案 0 :(得分:0)

您可以这样做。

控制器

public class HomeController : Controller
{
    public ActionResult HideQueryString()
    {
        return View("Tut143");
    }

    public ActionResult Print(string location, string startDate, string endDate)
    {
        //print here
        return RedirectToAction("HideQueryString");
    }

    public ActionResult Tut143()
    {
        return View();
    }

查看:

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Tut143</title>
    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
    <script type="text/javascript">
        $(function () {
            $("#theButton").click(function () {
                var model = {
                    Location: $('#Location :selected').val(),
                    StartDateTime: $("#StartDate").val(),
                    EndDateTime: $("#EndDate").val()
                };
                var url = '@Url.Action("Print", "Home")' + '?location=' + model.Location + '&startDate=' + model.StartDateTime + '&endDate=' + model.EndDateTime;
                window.location.href = url;
            })
        })
    </script>
</head>
<body>
    <div>
        <select id="Location">
            <option value="Arizona">Arizona</option>
            <option value="California">California</option>
            <option value="Wyoming">Wyoming</option>
            <option value="Delaware">Delaware</option>
        </select>
        <input id="StartDate" type="text" value="default startdate value" />
        <input id="EndDate" type="text" value="default enddate value" />
        <input id="theButton" type="button" value="Go" />
    </div>
</body>
</html>

答案 1 :(得分:0)

如果要将数据从前端传递到后端控制器,则有两种方法:

  1. 通过GET(在URL上传递参数)
  2. 具有POST的功能,您可以通过AJAX进行操作,也可以通过POST操作将信息放入要在控制器中命中的方法中的表单

MVC将为您执行绑定,例如,使用POST的所有信息都应在表单内部,然后在控制器上,您可以创建模型作为输入并使用默认的MVC绑定。

如果要从url中隐藏该信息,我的建议是通过帖子(在带有提交的表单内)进行操作,但是无论如何,如果在两种情况下都单击浏览器的“网络”选项卡,都应该看到您要传递给控制器​​的参数。

还有其他方法可以实现与使用TempData字典相同的功能,该字典保留有关控制器和视图之间的往返操作的信息,但是我不建议每次使用该方法时都以这种方式进行操作作为修补我的问题的后门,我感到内

相关问题