@rgamretsky
SharePoint Develorep(а хочется в ASP.NET MVC dev)

Как получить один из передаваемых параметров?

При помощи ActionLink передаю несколько параметров:
@Html.ActionLink("Вход", "Dialog", null,

                               new
                               {
                                   @class = "openDialog",
                                   data_dialog_id = "entry",
                                   data_dialog_title = "Вход",
                                   data_dialog_width = "auto",
                                   data_dialog_height = "auto"
                               })

Как в контролере получить только параметр data_dialog_id = "entry" ?
  • Вопрос задан
  • 4018 просмотров
Решения вопроса 1
Valeriy1991
@Valeriy1991
Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
Добрый день!

Возможно, вопрос еще актуален, поэтому отвечу.
Для передачи параметра в метод действия Вам необходимо, чтобы сам метод действия принимал этот параметр (как правильно указал chydaya):
public ActionResult Dialog(string dataDialogId)
{
	//...
	return View();
}


Прописывать значения параметров в маршруте вовсе необязательно. Т.е. маршрут может быть стандартным:
routes.MapRoute(
	name: "Default",
	url: "{controller}/{action}",
	defaults: new { controller = "Home", action = "Index" }
);


Если Вы для разработки используете Visual Studio, то при вводе "Html.ActionLink(" у Вас сразу срабатывает IntelliSense, которая подсказывает, какие входные параметры есть у этого метода. И если внимательно присмотреться, то, как верно заметил Vadimyan, у него есть различные перегрузки, и в некоторых есть параметр object routeValues - это то, что Вам нужно. Именно в этом параметре Вы указываете переменные для метода действия, например, так:
@Html.ActionLink("Вход", "Dialog", new { dataDialogId = "entry" })


В Вашем примере, который Вы указали в вопросе:
@Html.ActionLink("Вход", "Dialog", null,

                               new
                               {
                                   @class = "openDialog",
                                   data_dialog_id = "entry",
                                   data_dialog_title = "Вход",
                                   data_dialog_width = "auto",
                                   data_dialog_height = "auto"
                               })

Вы задаете html-атрибуты, а в качестве переменных маршрута у Вас стоит null. Сгенерированная html-разметка у Вас будет иметь следующий вид:
<a href="/{какой-то контроллер}/Dialog" class="openDialog" data_dialog_id = "entry" data_dialog_title = "Вход" data_dialog_width = "auto" data_dialog_height = "auto">Вход</a>


Общая рекомендация
Потратьте время, чтобы от и до изучить MVC по книге "ASP.NET MVC3 Framework с примерами на C# для профессионалов". Это фундамент, и даже на asp.net Вы не найдете настолько подробной информации о том, как работает и как правильно работать с ASP.NET MVC. Я пользовался туториалами (еще по WebForms + EntityFramework) с сайта asp.net, но они направлены на то, чтобы "прочитал туториал и начал делать". Однако если Вы хотите грамотно разрабатывать на ASP.NET MVC, начните с изучения основ и фундамента.

Надеюсь, я Вам немного помог.
Успехов!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Vadimyan
@Vadimyan
Программист C#
Html.ActionLink(article.Title, 
                "Item",   // <-- ActionMethod
                "Login",  // <-- имя контроллера
                new { id = article.ArticleID }, // <-- Передаваемые параметры.
                null  // <-- htmlArguments, эта коллекция служит для назначения параметров элементу html, который будет сгенерирован.
                )

То есть вам нужно использовать не 4, а 3 параметр метода. При этом в маршрутах должен быть прописан соответствующий вариант параметров (я привёл пример с двумя):
routes.MapRoute(
                name: "Default2",
                url: "{controller}/{action}/d={data_dialog_id}a={data_dialog_title}",
                defaults: new { controller = "Home", action = "Index", data_dialog_id = UrlParameter.Optional, data_dialog_title = UrlParameter.Optional }
            );


Если я правильно понял вопрос...
Ответ написан
chydaya
@chydaya
Во-первых, никаких параметров в твоем коде не передается никуда, кроме как в атрибуты линка.
Во-вторых, если нужен один параметр, так передавай один параметр
@Html.ActionLink("Вход", "Dialog", new { data_dialog_id = "entry" },

                               new
                               {
                                   @class = "openDialog",
                                   data_dialog_id = "entry",
                                   data_dialog_title = "Вход",
                                   data_dialog_width = "auto",
                                   data_dialog_height = "auto"
                               })
							   
public ActionResult Index(string data_dialog_id){
...
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы