Я играю с приложением ASP.NET MVC, и у меня возникла проблема. Я довольно новичок в ASP.NET MVC и едва понимаю основы, чтобы заставить вещи работать на этом этапе.ASP.NET MVC: привязка к нескольким моделям
У меня есть PersonModel, PersonController и куча представлений, которые позволяют пользователю добавлять нового человека, редактировать человека и искать людей.
Я не использую базу данных на заднем конце. Все, что я делаю, зависит от внешней DLL, которая возвращает структуры «person» (что я превращаю в PersonModels).
Для того, чтобы искать людей, я должен предоставить персональную структуру, которая действует как критерии поиска для метода во внешней DLL. Метод возвращает коллекцию человеческих структур, которые соответствуют критериям поиска. Если я хочу получить всех людей в системе, я поставлю пустую человеческую структуру для метода.
Итак, у меня есть функция «получить все люди», но я хотел бы предоставить расширенный поиск.
Мой поиск Просмотр привязывается к классу, который содержит 2 свойства:
Public Class PersonSearchModel
Private _searchCriteria As PersonModel
Private _searchResults As List(Of PersonModel)
Public Property SearchCriteria As PersonModel
Get
return _searchCriteria
End Get
Set(ByVal value As PersonModel)
_searchCriteria = value
End Set
End Property
Public Property SearchResults As List(Of PersonModel)
Get
return _searchResults
End Get
Set(ByVal value As List(Of PersonModel))
_searchResults = value
End Set
End Property
End Class
Теперь поиск Просмотр привязывается к этому PersonSearchModel и у меня есть 2 секции ... раздел, в котором пользователь может предоставить критерии поиска и раздел, в котором отображаются результаты поиска.
У меня возникла проблема с привязкой PersonSearchModel.SearchCriteria к элементам управления, используемым для отображения/сбора критериев поиска Person.
Я не могу найти критерии поиска.
Это то, что у меня есть на мой взгляд, для критериев поиска:
<fieldset>
<legend>Search Criteria</legend>
<%
With Model.SearchCriteria
%>
<div style="float:left">
<p>
<label for="FirstName">
FirstName:</label>
<%=Html.TextBox("FirstName", Html.Encode(.FirstName))%>
<%= Html.ValidationMessage("FirstName", "*") %>
</p>
<p>
<label for="LastName">
LastName:</label>
<%=Html.TextBox("LastName", Html.Encode(.LastName))%>
<%= Html.ValidationMessage("LastName", "*") %>
</p>
<!-- More controls -->
</div>
<% End With%>
</fieldset>
<%=Html.ActionLink("Search", "Search",Model.SearchCriteria)%>
<!-- The Search Results Section-->
PersonModel передается в метод поиска является новой/пустой PersonModel объекта. Он не содержит данные, введенные пользователем.
Что я здесь делаю неправильно?
********** Редактировать ********** Я попытался изменить вид для привязки по-разному. Я удалил VB «С»:
<fieldset>
<legend>Search Criteria</legend>
<div style="float:left">
<p>
<label for="FirstName">
FirstName:</label>
<%=Html.TextBox("FirstName", Html.Encode(.FirstName))%>
<%= Html.ValidationMessage("FirstName", "*") %>
</p>
<p>
<label for="LastName">
LastName:</label>
<%=Html.TextBox("LastName", Html.Encode(.LastName))%>
<%= Html.ValidationMessage("LastName", "*") %>
</p>
<!-- More controls -->
</div>
</fieldset>
<%=Html.ActionLink("Search", "Search",Model.SearchCriteria)%>
<!-- The Search Results Section-->
Но это не помогло.
Я также попытался:
<fieldset>
<legend>Search Criteria</legend>
<div style="float:left">
<p>
<label for="FirstName">
FirstName:</label>
<%=Html.TextBox("Model.SearchCriteria.FirstName", Html.Encode(Model.SearchCriteria.FirstName))%>
<%= Html.ValidationMessage("FirstName", "*") %>
</p>
<p>
<label for="LastName">
LastName:</label>
<%=Html.TextBox("Model.SearchCriteria.LastName", Html.Encode(Model.SearchCriteria.LastName))%>
<%= Html.ValidationMessage("LastName", "*") %>
</p>
<!-- More controls -->
</div>
</fieldset>
<%=Html.ActionLink("Search", "Search",Model.SearchCriteria)%>
<!-- The Search Results Section-->
И:
<fieldset>
<legend>Search Criteria</legend>
<div style="float:left">
<p>
<label for="FirstName">
FirstName:</label>
<%=Html.TextBox("SearchCriteria.FirstName")%>
<%= Html.ValidationMessage("FirstName", "*") %>
</p>
<p>
<label for="LastName">
LastName:</label>
<%=Html.TextBox(".SearchCriteria.LastName")%>
<%= Html.ValidationMessage("LastName", "*") %>
</p>
<!-- More controls -->
</div>
</fieldset>
<%=Html.ActionLink("Search", "Search",Model.SearchCriteria)%>
<!-- The Search Results Section-->
Однако, я все еще получаю пустую/новую PersonModel передается в метод поиска в контроллере. Я также проверил PersonSearchModel.SearchCriteria, чтобы узнать, может ли это содержать введенные значения, но у этого также есть новый/пустой PersonModel.
-Frinny
Не уверен, что вы здесь делаете. Я немного смущен вашим выбором имени переменной ... имя переменной соответствует типу. Поэтому я не уверен, что вы пытаетесь сказать мне совместить имя переменной с именем поля или если вы говорите мне, чтобы я соответствовал типу объекта. Я попробую в обоих направлениях и посмотрю, что произойдет. Спасибо за ваш ответ. – Frinavale
Большое спасибо. Оказывается, это имя переменной должно совпадать. Я, вероятно, должен выбрать книгу по этой теме, вместо того, чтобы сначала пробовать руки. Еще раз спасибо! – Frinavale
Я смотрю на свои другие виды (редактирование и создание), и я не указываю имя переменной в именах полей для этих представлений ... но я все еще получаю объект полностью заполненного человека, переданный в качестве параметра к методам «создать» или «отредактировать». Почему это так? – Frinavale