我正在使用Viewmodel,但是当我提交表单时,我没有收到值。
我有一个像这样的模型......
Public Class ProductSummaryModel
Property productGUID As Integer
Property productName As String
Property productPrice As Double
Property productSku As String
Property categories As String()
Property ShipsWithin As Nullable(Of Integer)
<AllowHtml>
Property productWebDescription As String
Property ImageMainPath As String
End Class
然后我有一个像这样的ViewModel ......
Public Class ProductViewModel
Public ProductSummary As ProductSummaryModel
End Class
这是我的控制器...
Public Function Add() As ActionResult ' Default View To Add Item
Dim prdsummary As ProductViewModel = New ProductViewModel
Return View("Add", prdsummary)
End Function
在我的&#34;添加&#34;查看我有以下内容......
<tr>
<td>Price: </td>
<td><%=Html.TextBoxFor(Function(f) f.ProductSummary.productPrice)%></td>
</tr>
问题是,当我提交FORM时,我无法获得POSTED表单值。
Public Function AddItem(ByVal Model As ProductViewModel) As ActionResult ' Add Item into DB
Dim ajaxMessage As New AjaxFormResponse
Dim prd As ProductSummaryModel = New ProductSummaryModel
Model.ProductSummary = prd
Dim skuID As Integer = 0
msgbox(Model.ProductSummary.categories) ' Empty
End Function
可能有更好的方法来解决这个问题。
*更新 * *
我已经弄明白问题是什么......当将Model传递给ViewModel时,我必须这样做......
Dim Product As ProductViewModel = New ProductViewModel
Dim ProductSummary As New ProductSummaryModel
Product.ProductSummary = ProductSummary
Return View("Add", Product)
答案 0 :(得分:1)
为什么不使用ProductSummaryModel进行绑定而不是ProductViewModel。这样你就可以保持简单。如果可以,请避免使用嵌套绑定。 另外请确保您在视图中使用如下,以及HttpPost attr。在控制器中
产品控制器
Public Class ProductController
Inherits Controller
' Main Action
Public Function Main() As ActionResult
Dim prdViewModel As ProductViewModel = New ProductViewModel
prdViewModel.ProductSummary = New ProductSummaryModel
Return View("Main", prdViewModel)
End Function
' Partial Action
Public Function Add() As ActionResult
Dim prdViewModel As ProductViewModel = New ProductViewModel
prdViewModel.ProductSummary = New ProductSummaryModel
Return View("Add", prdViewModel)
End Function
'POST Action from Partial View
<HttpPost()> _
Public Function AddItem(ByVal Model As ProductSummaryModel) As ActionResult ' Add Item into DB
msgbox(Model.productPrice) ' Empty
End Function
End Class
主视图
<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage(Of MvcApplication2.ProductViewModel)" %>
<asp:Content ID="manageTitle" ContentPlaceHolderID="TitleContent" runat="server">
Main Page
</asp:Content>
<asp:Content ID="manageContent" ContentPlaceHolderID="MainContent" runat="server">
<%
Html.RenderPartial("_Add", Model.ProductSummary)
%>
</asp:Content>
部分视图
<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of MvcApplication2.ProductSummaryModel)" %>
<asp:Content ID="registerTitle" ContentPlaceHolderID="TitleContent" runat="server">
Register
</asp:Content>
<asp:Content ID="registerContent" ContentPlaceHolderID="MainContent" runat="server">
<% Using Html.BeginForm("AddItem", "Product")%>
<%: Html.AntiForgeryToken() %>
<tr>
<td>Price: </td>
<td><%: Html.TextBoxFor(Function(f) f.productPrice) %></td>
</tr>
<input type="submit" value="Register" />
<% End Using%>
</asp:Content>
更新视图模型
Public Class ProductSummaryModel
Property productGUID As Integer
Property productName As String
Property productPrice As Double
Property productSku As String
Property categories As String()
Property ShipsWithin As Nullable(Of Integer)
<AllowHtml>
Property productWebDescription As String
Property ImageMainPath As String
End Class
Public Class ProductViewModel
Public ProductSummary As ProductSummaryModel
End Class
答案 1 :(得分:0)
我看到两个问题:
首先,当您执行此操作时,您将覆盖已过帐的值:
Dim prd As ProductSummaryModel = New ProductSummaryModel
Model.ProductSummary = prd
来自视图的模型中的ProductSummary
属性将丢失,并且只有在读取其属性时才会获得默认值。
此外,您不会在视图中显示如何设置categories
值。您是否允许此属性的用户输入或其他操作?