Передача данных из представления в контроллер - с моделью - PullRequest
0 голосов
/ 25 января 2019

Мне нужно передать некоторую информацию из представления в контроллер.

В настоящее время я делаю что-то вроде следующего:

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 будетраспечатайте соответствующий вид.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Если вы хотите передать данные с внешнего интерфейса на внутренний контроллер, у вас есть два способа:

  1. через GET (передача параметров по URL)
  2. с POST, что вы можете сделать это через AJAX или просто поместить свою информацию в форму с действием POST для метода, который вы хотите использовать в контроллере

MVC сделает привязку за вас, вся информация, например, с помощью POST, должна находиться внутри формы, затем на контроллере вы можете создать свою модель в качестве входных данных и использовать привязки MVC по умолчанию.

Мое предложение, если вы хотите скрыть эту информацию от URL-адреса, - сделать это через сообщение (внутри формы с отправкой), но в любом случае, если вы нажмете на вкладку Сеть в браузере, в обоих случаях вы должны увидеть параметры, передаваемые вашему контроллеру.

Существуют и другие способы достижения того же, что и при использовании словаря TempData, в котором хранится информация для выполнения операции туда и обратно между контроллером и представлением, но я не рекомендую действовать таким образом, каждый раз, когда я использую это как бэкдор, чтобы исправить мои проблемы, я чувствую себя виноватым

0 голосов
/ 25 января 2019

Вы можете сделать это.

Контроллер

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...