Передача значений из представления в качестве входных значений для формирования в ASP.NET MVC

1

У меня есть представление, которое вызывает дочернее действие:

@Html.Action("RenderPostMessage", "JobSurface")

Контроллер выглядит так:

public ActionResult RenderPostMessage()
{
    PostMessageViewModel postMessageViewModel = new PostMessageViewModel();
    return PartialView("PostMessage", postMessageViewModel);
}

Частично это вызывает следующее:

@model PostMessageViewModel

@{
    Html.EnableClientValidation(true);
    Html.EnableUnobtrusiveJavaScript(true);
}
@using (Html.BeginUmbracoForm<JobSurfaceController>("HandlePostMessage", new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)       

    <p>
        @Html.EditorFor(model => model.Message)
        @Html.ValidationMessageFor(model => model.Message)
    </p>

    <p>
        @Html.LabelFor(model => model.File)
        @Html.TextBoxFor(x => x.File, new { type = "file" })
    </p>
    <p><button class="button">Post Message</button></p>
}

Контроллер сообщения "сообщение сообщения" выглядит следующим образом:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult HandlePostMessage(PostMessageViewModel model)
{
    // Some logic
}

У меня есть куча переменных в представлении, что мне нужно как-то перейти к форме (возможно, как скрытые поля ввода?), Но хотя я знаю, как создавать скрытые входы на частичном, я понятия не имею, как их заполнять значения из представления.

Может ли кто-нибудь предложить, как получить значение, переданное контроллеру?

Большое спасибо.

Теги:
asp.net-mvc
asp.net-mvc-4

2 ответа

1
Лучший ответ

У меня есть куча переменных в представлении, что мне нужно как-то перейти к форме (возможно, как скрытые поля ввода?)

Это просто, если вы хотите отобразить скрытое поле ввода со значением, а затем добавить его в объект ViewBag в представлении.

Например, если вы хотите добавить содержимое переменной в форму, то в представлении вы выполните следующее:

ViewBag.Foo = "Some Value";

Затем в файле cshtml вы добавляете скрытое поле:

@Html.Hidden("Foo")

Таким образом, вы получите значение в сообщении формы.

EDIT: так выглядит ваш код.

public ActionResult RenderPostMessage()
{
    PostMessageViewModel postMessageViewModel = new PostMessageViewModel();

    // here you set as many values as you want to receive in the form post.
    ViewBag.SomeField = "Some Value";

    return PartialView("PostMessage", postMessageViewModel);
}

Посмотреть

@model PostMessageViewModel

@{
    Html.EnableClientValidation(true);
    Html.EnableUnobtrusiveJavaScript(true);
}
@using (Html.BeginUmbracoForm<JobSurfaceController>("HandlePostMessage", new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)       

    @Html.Hidden("SomeField")

    <p>
        @Html.EditorFor(model => model.Message)
        @Html.ValidationMessageFor(model => model.Message)
    </p>

    <p>
        @Html.LabelFor(model => model.File)
        @Html.TextBoxFor(x => x.File, new { type = "file" })
    </p>
    <p><button class="button">Post Message</button></p>
}
  • 0
    Спасибо за это. Теперь я вижу, что скрытый ввод создается с атрибутом name="Foo" , но он не содержит значения (когда я просматриваю инструменты браузера dev). Должно ли это? Как только я знаю наверняка, я могу двигаться вперед, пытаясь получить значение в коде и использовать его.
  • 0
    @ Дэн, вы установили значение в Viewbag . Вам нужно установить желаемое значение в скрытом поле.
1

@Html.Action имеет параметр 'routeValues', который является анонимным объектом. Вы можете передавать значения там. Итак... от взгляда к действию:

@Html.Action("RenderPostMessage", routeValues:new{SurfaceType = "JobSurface", OtherValue = "Something", NewValue = "Something else"});

Действие принимает эти значения маршрута в качестве параметров метода:

    public ActionResult RenderPostMessage(string surfaceType, string otherValue, string newValue)
    {
        var viewModel = new PostMessageViewModel();
viewModel.SurfaceType = surfaceType;
viewModel.OtherValue = otherValue;
viewModel.NewValue = newValue;
        return PartialView("PostMessage", viewModel);
    }

Готово!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню