Получить параметр запроса из URL в MVC View - PullRequest
0 голосов
/ 02 июля 2018

У меня есть ссылка href на страницу, которая добавляет параметр к ссылке, например: СВХ / регистровые свой-интерес? Курс = 979

Я пытаюсь извлечь значение из Course, т. Е. 979, и отобразить его в view. При попытке использовать приведенный ниже код я возвращаюсь только с 0, а не с ожидаемым значением курса. в идеале я бы хотел избежать использования routes.

Вот вид:

<div class="contact" data-component="components/checkout">

            @using (Html.BeginUmbracoForm<CourseEnquiryPageSurfaceController>("PostCourseEnquiryForm", FormMethod.Post, new { id = "checkout__form" }))
            {
                //@Html.ValidationSummary(false)
                @Model.Course;
            }

И мой контроллер:

 public ActionResult CourseEnquiry(string Course)
    {
        var model = Mapper.Map<CourseEnquiryVM>(CurrentContent);

        model.Course = Request.QueryString["Course"];
        return model
     }

Это модель для просмотра:

public class CourseEnquiryVM : PageContentVM
{

    public List<OfficeLocation> OfficeLocations { get; set; }
    public string Test { get; set; }
    public string Course { get; set; }
    public List<Source> SourceTypes { get; set; }
}

РЕШЕНИЕ: После некоторых исследований и комментариев я изменил код, приведенный ниже, который теперь возвращает ожидаемое значение

@Html.HiddenFor(m => m.Course, new { Value = @HttpContext.Current.Request.QueryString["Course"]});

Спасибо всем

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

По вашему мнению, вы отображаете только значение Course .., которое не может быть отправлено. Вы должны включить значение курса с элементом ввода формы (текстовое поле, флажок, текстовое поле, скрытый и т. Д.).

Я бы настоятельно рекомендовал использовать EditorFor или Textboxfor, но поскольку ваше действие контроллера ожидает только string параметр, вы можете просто использовать Editor или TextBox.

@using (Html.BeginUmbracoForm<CourseEnquiryPageSurfaceController>("PostCourseEnquiryForm", FormMethod.Post, new { id = "checkout__form" }))
{
    //@Html.ValidationSummary(false)
    @Html.TextBox(Model.Course, null, new { @class = "form-control"});

    <input type="submit" value="Submit" />
}

Тогда вы должны просто сделать это в вашем контроллере:

 public ActionResult CourseEnquiry(string course) // parameter variables are camel-case
{
    var model = Mapper.Map<CourseEnquiryVM>(CurrentContent);

    if(!string.IsNullOrWhiteSpace(course))
        model.Course = course;

    return model;
 }

Дайте мне знать, если это поможет.

0 голосов
/ 02 июля 2018

На основании предоставленного вами кода формы вам нужно использовать @Html.HiddenFor(m => m.Course) вместо @Model.Course. @Model.Course просто отображает значение в виде текста вместо создания элемента ввода, который будет отправлен обратно на ваш контроллер.

Если ваша проблема связана со ссылкой до просмотра, на который вы ссылались выше, вот что я ожидаю:

Просмотр по ссылке:

@model CourseEnquiryVM

@Html.ActionLink("MyLink","CourseEnquiry","CourseController", new {course = @Model.Course}, null)

CourseController:

public ActionResult CourseEnquiry(string course)
{
    // course should have a value at this point
}
...