我在玩ASP.NET MVC应用程序,并且遇到了一些问题。我对ASP.NET MVC相当陌生,并且几乎不了解在这一点上让事情起作用的基础知识。ASP.NET MVC:绑定到多个模型
我有一个PersonModel,PersonController和一堆视图,让用户添加一个新人,编辑一个人并搜索人。
我没有在后端使用数据库。我所做的一切都依赖于返回“person”结构的外部DLL(我将其转变为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“With”:
<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 2009-12-08 14:51:23
非常感谢你马特。事实证明,它是必须匹配的变量名称。 我应该拿起一本关于这个话题的书,而不是先试着用手去做。再次感谢! – Frinavale 2009-12-08 14:55:52
我正在看我的其他视图(编辑和创建),我没有在这些视图的字段名称中指定变量名称......但我仍然得到一个完全填充的人物对象作为参数传入到“创建”或“编辑”方法。这是为什么? – Frinavale 2009-12-08 14:58:56