模型在MVC中没有绑定

时间:2014-11-05 18:29:28

标签: razor model-view-controller binding model-binding

我现在每时每刻都有这个问题。然后,我永远不知道如何正确和轻松地修复它。所以请一劳永逸地帮助我!

我的form(cihForm)没有绑定到视图。加载视图后,将文本添加到两个输入框,然后单击我的“保存”按钮,调试器将转到FormsViewModel>中的“新建”构造函数。按原样填充俱乐部和类别,一旦完成,调试器将转到“控制器”中的Create_Post功能。

一旦进入HTTPpost动作,我的模型就会有俱乐部和类别,但表格是空的。我的所有字段都分配了“无”或默认数据。

模型

Public Class FormsViewModel
    Public form As cihForm = New cihForm()
    Public Clubs As List(Of cihOrganizationSub) = New List(Of cihOrganizationSub)
    Public Categories As List(Of cihCategoryOrgDef) = New List(Of cihCategoryOrgDef)

    Public Sub New()
        Dim lists As cihLists = New cihLists()

        'Clubs
        lists.loadOrganizationSubs(ZenCommon.CurrentOrgId, ZenCommon.CurrentUserId)
        Clubs = New cihOrganizationSubList(ZenCommon.CurrentOrgId, ZenCommon.CurrentUserId).subList

        'Categories
        lists.loadCategoryOrgDef(ZenCommon.CurrentOrgId)
        Categories = lists.organizationClubCategories

    End Sub
End Class

控制器

<HttpGet>
<ActionName("Create")>
Function Create_Get() As ActionResult
    Dim viewModel As FormsViewModel = New FormsViewModel()
    Dim emptyList() As String = {}

    'List of Orgs
    ViewBag.SubOrgList = New SelectList(viewModel.Clubs, "subId", "codDescr", viewModel.form.selectedSubOrgId)

    'List of Events
    Dim search As cihEventSearch = New cihEventSearch(ZenCommon.CurrentOrgId, "", Date.Now.AddMonths(-1), Date.Now.AddMonths(1), True, emptyList, emptyList, emptyList)
    ViewBag.EventList = New SelectList(search.eventList.OrderByDescending(Function(evt) evt.startUtc), "eventId", "eventTitle", viewModel.form.selectedEventId)

    ViewBag.HideRightColumn = True
    ViewBag.BodyClass = "span10"

    Return View()
End Function

<HttpPost>
<ActionName("Create")>
Function Create_Post(form As FormsViewModel) As ActionResult

    Return View()
End Function

查看

    @ModelType MVCProject.FormsViewModel
    @Using Html.BeginForm()
        @Html.TextBoxFor(Function(model) model.form.Title, New With {.placeholder = "Title", .class = "hideOffFocus input-full large-type"})
        @Html.TextAreaFor(Function(model) model.form.Description, New With {.placeholder = "Description", .class = "hideOffFocus input-full"})

<input type="submit" name="cmdSave" value="Save" id="cmdSave" class="btn btn-primary" />
    End Using

2 个答案:

答案 0 :(得分:1)

尝试使用查看中的@Model MVCProject.FormsViewModel绑定模型。

答案 1 :(得分:-1)

我的问题是我忘了用&#34; Property&#34;标记我的物品。在我的模型中标记。我讨厌我必须为VB做这个。

Public Class FormsViewModel
    Public Property form As cihForm = New cihForm()
    Public Property Clubs As List(Of cihOrganizationSub) = New List(Of cihOrganizationSub)
    Public Property Categories As List(Of cihCategoryOrgDef) = New List(Of cihCategoryOrgDef)

    Public Sub New()
        Dim lists As cihLists = New cihLists()

        'Clubs
        lists.loadOrganizationSubs(ZenCommon.CurrentOrgId, ZenCommon.CurrentUserId)
        Clubs = New cihOrganizationSubList(ZenCommon.CurrentOrgId, ZenCommon.CurrentUserId).subList

        'Categories
        lists.loadCategoryOrgDef(ZenCommon.CurrentOrgId)
        Categories = lists.organizationClubCategories

    End Sub
End Class