【问题标题】:Pass Data from View to Controller - with model将数据从视图传递到控制器 - 使用模型
【发布时间】:2019-01-25 17:30:58
【问题描述】:

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

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

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

window.location.href = url;

我想隐藏位置、开始日期和结束日期,使其不显示在浏览器 url 中。

我正在考虑创建一个如下所示的模型并将模型发送到控制器,但不知道如何去做。

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

请注意,在我的例子中,我不需要检索任何数据,因为 Print 方法会进行打印。

除了使用

之外,我也愿意完成此任务
    window.location.href

如何使用 AJAX 完成此操作,因为我不需要返回带有任何数据的视图,因为 Print 方法操作将打印适当的视图。

【问题讨论】:

  • 你应该使用 AJAX。
  • 您可能需要澄清一下-您是说您不需要view 来返回任何数据,但实际上您需要(因此客户端可以打印“某物”)-不管是 Ajax 还是标准 GET/POST(根据定义,它们都发送 Request 并接收一些 Response) - 您当前的代码也是如此(发送带有查询字符串的 GET 并期待一些响应)。

标签: c# asp.net-mvc


【解决方案1】:

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

  1. 通过 GET(在 URL 上传递参数)
  2. 使用 POST,您可以通过 AJAX 执行此操作,或者只需将您的信息放在一个表单中,并使用 POST 操作到您想要在控制器中点击的方法

MVC 会为你做绑定,所有使用 POST 的信息,例如,应该在表单内,然后在控制器上,你可以创建你的模型作为输入并使用默认的 MVC 绑定。

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

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

【讨论】:

    【解决方案2】:

    你可以这样做。

    控制器

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      相关资源
      最近更新 更多