параметр c # razor actionresult

#c# #asp.net-mvc #razor

#c# #asp.net-mvc #razor

Вопрос:

Я совершенно новичок в mvc razor, поэтому, пожалуйста, извините за мое незнание этого предмета. Если я правильно понял, именно контроллер получает параметр url, например, следующий:

   // Get: /User/23
  public ActionResult(int? id) { 
       return View("User", id);
  }
  

По сути, это ActionResult возвращает параметр в URL-адресе и отправляет его куда-либо. Но где?

Кроме того, допустим, у меня есть репозиторий, в который я возвращаю всех пользователей из IQueryable<> класса. Если идентификатор не равен null, он получает только соответствующий результат, если нет, он получает весь список. Поэтому я хотел бы вернуть список в представление и показать результаты. Как я могу это сделать? Для облегчения понимания я привожу следующий пример:

 // I want to populate this list based on the id in the actionresult
@foreach(var u in MyList) { 
   name: @u.Name <br>
   lastname: @u.LastName <hr>
}
  

Ответ №1:

return View вызывает вспомогательный метод в базовом классе, Controller .

Он вернет ViewResult , причем параметром будет модель, переданная в представление.

Итак, если вы хотите пройти по списку пользователей, вы бы сделали это:

 public ActionResult Users()
{
   var users = _repository.FindAllUsers();
   return View(users);
}
  

Обратите внимание, что я не указал имя представления, поэтому в данном случае соглашением по умолчанию будет поиск представления на основе имени действия Users.cshtml . Всегда старайтесь использовать соглашение вместо конфигурации — это то, что делает MVC отличным.

 @model IEnumerable<YourApp.Models.User>
@Html.DisplayForModel()
  

Общий доступDisplayTemplatesUser.cshtml

 @Html.LabelFor(model => model.Name)
@Html.DisplayFor(model => model.Name)
@Html.LabelFor(model => model.LastName)
@Html.DisplayFor(model => model.LastName)
  

Обратите внимание, что я не использовал foreach цикл — я использую пользовательский шаблон отображения, опять же — соглашение о конфигурации.

Комментарии:

1. вау, спасибо! Но все же, как я могу передать параметр URL в модель? Выполнит ли ViewBag.Variable эту работу или есть подход получше?

2. @Shaokan — какова цель этого URL-адреса? Это для того, чтобы где-то сгенерировать ссылку? Если это так, вам следует использовать Html.ActionLink или пользовательский HTML-помощник. Дайте мне знать, какой тип URL вы хотите сгенерировать, и я уточню.

3. @RPM1984 Хорошо, прежде всего позвольте мне заявить, что я использую этот код только для тренировки своих навыков программирования, поэтому, во-первых, я не задаюсь вопросом о безопасности. В любом случае, я хочу создать страницу, которую я могу использовать как базу данных sql. Я хочу выбрать имена таблиц из списка ссылок, а затем я хочу заполнить динамическую таблицу на основе выбранной мной таблицы. Я не могу использовать веб-сетку, потому что я хочу отображать каждую ячейку в текстовом поле, чтобы я мог легко редактировать, удалять или вставлять новые данные. Другими словами, я хочу создать базовый интерфейс базы данных. И я передаю имя таблицы переменных из URL-адреса.

4. Я уже делал нечто подобное, но я сделал это, используя classic asp.net элементы управления и c #, не использующие mvc razor 🙂 Итак, в принципе, я пытаюсь учиться на сложных вещах, я имею в виду, трудных для меня.

5. Но сколько это разных страниц? Из того, что я прочитал, на первой странице будут перечислены все различные таблицы в виде ссылок. Затем на второй странице будут показаны табличные данные, основанные на ссылке, по которой был нажат. Это верно? Если это так, должно быть два метода действия. Один для возврата списка имен таблиц, и представление будет создано Html.ActionLink для каждой таблицы. Затем эти ссылки будут указывать на второй метод действия, который отображает данные из этой таблицы. Имеет ли это смысл?

Ответ №2:

Все, что вы возвращаете в качестве второго параметра, является моделью, переданной в представление. Затем вы могли бы наследовать страницу razor в WebViewPage или, что еще лучше, использовать ключевое слово @model. Переданные данные доступны на странице через переменную «Model».

Хороший пример использования после этого находится на http://weblogs.asp.net/scottgu/archive/2010/10/19/asp-net-mvc-3-new-model-directive-support-in-razor.aspx

Комментарии:

1. Спасибо за ответ! Однако у меня есть другой вопрос: как я могу передать эту переменную в MyModel.cs?

2. @Shaokan Не уверен, что ты подразумеваешь под «передать эту переменную в MyModel.cs»