Member 12658724 Ответов: 2

Передайте два параметра в метод контроллера


Мой маршрут по умолчанию
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
);

Теперь в контроллере у меня есть метод.
public ActionResult LanguageEdit(int id)
       {

Соответствующий код в представлении выглядит следующим образом:
<div class="widget-content">
                       @using (Html.BeginForm("Language", "Country", FormMethod.Post, new { enctype = "multipart/form-data" }))
                       {
                           @Html.HiddenFor(m => m.CountryId)
                           @Html.Grid(Model.Languages).Columns(column =>
                      {
                          column.For(m => m.LanguageName).Named("Languages");
                          column.For(m => String.Format("<a class='btn btn-primary' href='/Country/LanguageEdit/{0}'>Edit</a> <a href='#deleteConfirmModal' role='button' data-toggle='modal' class='btn btn-danger deleteBtn'><input type='hidden' id='countryId' value='{0}'/>Remove</a>", m.CountryId)).Named("Actions").Encode(false);
                      }).Attributes(@class => "table")
                       }
                   </div>

Мы передаем методу id (CountryId).
Однако по какой-то причине я должен передать другой параметр languageId методу контроллера.

Так каков же наилучший способ?

Что я уже пробовал:

пытался этот, но все еще не ясно. Нужна помощь с кодом. В частности, в виде.

F-ES Sitecore

Если это часть модели, используйте тот же код, что и для CountryId. Если это не так, то используйте

@формат HTML.Скрытые("номер", номер)

Прочтите его, используя обычную привязку модели или запрос.Форма["номер"]

Member 12658724

Нужно ли менять маршрут?

F-ES Sitecore

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

Member 12658724

Я борюсь с url-адресом маршрута: "{controller} / {action} / {id}". У него есть только один параметр, но я должен передать два параметра.

F-ES Sitecore

Не нужно менять маршрут, просто добавьте это в форму

@формат HTML.Скрытые("номер", номер)

затем добавить номер парам на ваш язык действий

public ActionResult Language(YourModel model, int? номер)

затем параметр languageId будет заполнен этим скрытым значением. Я предположил, что это int, измените тип по мере необходимости

Member 12658724

Как я уже сказал. Я не уверен, что код в представлении.
column.For(m => String.Format("<a class='btn btn-primary' href='/Campaign/LanguageEdit/{0}'>Edit</a> <a href='#deleteConfirmModal' role='button' data-toggle='modal' class='btn btn-danger deleteBtn'><input type='hidden' id='countryId' value='{0}'/>Remove</a>", m.CountryId)).Named("Actions").Encode(false);

Приведенный выше код предназначен для одного параметра. Если я добавлю второй параметр. Я не знаю, как его изменить. Я думаю, что это, скорее всего, так
column.For(m => String.Format("<a class='btn btn-primary' href='/Campaign/LanguageEdit/{0}'>Edit</a> <a href='#deleteConfirmModal' role='button' data-toggle='modal' class='btn btn-danger deleteBtn'><input type='hidden' id='countryId' value='{0}'/>Remove</a>", ?m.CountryId&m.LanguageId)).Named("Actions").Encode(false);

Разве я не прав?

F-ES Sitecore

Не думайте, что это сработает, почему бы вам просто не использовать Html?Спрятан? Или если LanguageId является частью модели, то используйте HiddenFor, как и в случае с CountryId.

Member 12658724

И CountryId, и LanguageId являются частью модели. Я просто не знаю, как поместить их в код бритвы. Мне нужен код.

F-ES Sitecore

@формат HTML.HiddenFor(м =&ГТ; м. CountryId)
@формат HTML.HiddenFor(м =&ГТ; м. Номер)

Member 12658724

Не могли бы вы вставить весь код целиком? Извините за невежество. Я хотел бы изменить весь код. Вы можете поместить его в ответ, чтобы я мог пометить его как ответ.
Мой первоначальный код был:

<div class="widget-content">                        @using (Html.BeginForm("Language", "Country", FormMethod.Post, new { enctype = "multipart/form-data" }))                        {                            @Html.HiddenFor(m => m.CountryId)                            @Html.Grid(Model.Languages).Columns(column =>                       {                           column.For(m => m.LanguageName).Named("Languages");                           column.For(m => String.Format("<a class='btn btn-primary' href='/Country/LanguageEdit/{0}'>Edit</a> <a href='#deleteConfirmModal' role='button' data-toggle='modal' class='btn btn-danger deleteBtn'><input type='hidden' id='countryId' value='{0}'/>Remove</a>", m.CountryId)).Named("Actions").Encode(false);                       }).Attributes(@class => "table")                        }                    </div>

2 Ответов

Рейтинг:
9

F-ES Sitecore

Извините, я не понял, что вы не отправляете форму, а предоставляете ссылку для клика. Вам нужно будет сделать что-то вроде этого

column.For(m => String.Format("<a class='btn btn-primary' href='/Country/LanguageEdit/{0}?LanguageId={1}'>Edit</a> <a href='#deleteConfirmModal' role='button' data-toggle='modal' class='btn btn-danger deleteBtn'><input type='hidden' id='countryId' value='{0}'/>Remove</a>", m.CountryId, m.LanguageId)).Named("Actions").Encode(false);


Затем измените действие контроллера

public ActionResult LanguageEdit(int id, int? languageId)
        {


"идентификатор" заполняется по маршрутизации и номер заполняются при помощи стандартных значений строки запроса


Рейтинг:
0

Member 7870345

На мой взгляд, самый простой способ передать коллекцию параметров - это создать класс, который имеет столько свойств, сколько "параметров" вы хотите.
Например:

public class model1
{
	public int param1;
	public int param2;
	...       
}


И тогда ваш контроллер должен быть объявлен как:
public ActionResult LanguageEdit(model1 model)
{
	...
		model1.param1
		...
		model2.param2
	...
}


А в представлении что-то вроде:
@Html.HiddenFor(m => m.param1)
    ...
@Html.TextFor(m => m.param2)


Этот вид "класса" может быть расширен на любое количество "параметров" любого вида (или типа)