Привязка переключателя к объекту в MVC 3 VB.net

Я просмотрел множество сайтов и предложений, но не смог заставить работать концепцию привязки. Я столкнулся со следующей проблемой.

У меня есть следующий класс модели, как показано ниже: Master View Model:

    Public Class MasterVM


    Public Property Language As LanguageVM
    Public Property Question As QuestionVM

    Public menus As List(Of MenuVM)

    Public Property UserControlName As String
    Public Property Model As Object

End Class

Модель представления языка

 Public Class LanguageVM

#Region "Properties"

        Public Property IsEnglish As Boolean

#End Region


    End Class

Класс моего контроллера:

Public Class WizardController
        Inherits System.Web.Mvc.Controller

        '
        ' GET: /Wizard
        Function Index() As ActionResult
            Dim oWizard As New Wizard
            Dim oMasterWizard As New MasterVM
            Dim IsNewlyIniated As Boolean = False
            If (System.Web.HttpContext.Current.Session(Constants.WizardObjectCollection) IsNot Nothing) Then
                If (System.Web.HttpContext.Current.Session(Constants.WizardObjectCollection).ToString <> "") Then
                    oMasterWizard = DirectCast(System.Web.HttpContext.Current.Session(Constants.WizardObjectCollection), MasterVM)
                Else
                    IsNewlyIniated = True
                End If
            Else
                IsNewlyIniated = True
            End If

            If (IsNewlyIniated) Then
                oMasterWizard = oWizard.GetWizardInfo()
                If (Session("Language").ToString() = "Spanish") Then
                    oMasterWizard.Wizard.Language.IsEnglish = False
                Else
                    oMasterWizard.Wizard.Language.IsEnglish = True
                End If

                System.Web.HttpContext.Current.Session(Constants.WizardObjectCollection) = oMasterWizard

            End If

            Return View("Wizard", oMasterWizard)

        End Function

 <HttpPost()>
        Function GetLanguageInfo(ByVal oLanguage As LanguageVM) As ActionResult
            Try
                Dim a As Integer
                a = 10
            Catch ex As Exception
                Throw ex
            End Try
        End Function

    End Class

Я хочу отобразить два переключателя в моем представлении, отображающем язык как английский и испанский. По умолчанию он должен быть привязан к свойствам моего языкового класса isenglish и isspanish.

и когда происходит сообщение, я должен получить значение, если пользователь изменил его в свойстве Is selected. как я могу это получить.

Мой код страницы ASCX выглядит следующим образом:

<%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl(Of SBE.Services.MasterWizard.LanguageVM)" %>
<form method="post" action="/Wizard/GetLanguageInfo">
<fieldset>
    <legend>Wizard Language</legend>
    <p>Please select the language for your Wizard</p>

      <%= Html.RadioButtonFor(Function(model) model.IsEnglish, True)%>English  
<%= Html.RadioButtonFor(Function(model) model.IsEnglish, False)%> Spanish     
<input id="btnNext" type="submit" value="Next">  


Еще одна цель заключается в том, что после привязки я хочу, чтобы обновленное значение было выбрано пользователем в объекте и передано для публикации действия, определенного в контроллере. Любая помощь будет оценена.


person Vinod Nair    schedule 27.03.2012    source источник


Ответы (1)


Я считаю, что причина, по которой он не является обязательным, заключается в том, что вы разместили имя объекта в переключателе как «Язык», но в LanguageVM оно определено как «IsEnglish».

Чтобы упростить задачу, я рекомендую всегда использовать Html.RadioButtonFor, так как гораздо меньше места для ошибок, когда вам не нужно жестко кодировать имя ожидаемой переменной. Тогда это должно быть что-то вроде

<%= Html.RadioButtonFor(m => m.IsEnglish, true)%>English 
<%= Html.RadioButtonFor(m => m.IsEnglish, false)%> Spanish
person DMulligan    schedule 27.03.2012
comment
Я попробовал приведенный выше код, и в исходном коде я увидел следующий код: ‹input id=IsEnglish name=IsEnglish type=radio value=True /›English /> Испанский. Но по какой-то причине мое почтовое действие не запускается при следующем нажатии кнопки, поэтому я не знаю, привязано ли значение или нет. любое предложение - - person Vinod Nair; 27.03.2012
comment
Благодаря Финкельштейну это сработало. Я обновил решение выше в сообщении. - person Vinod Nair; 28.03.2012