page.aspx и код позади (page.aspx.vb) проблемы отношений - PullRequest
8 голосов
/ 15 марта 2019

Я работаю в веб-проекте и решаю включить MVC 4 из ASP.NET.
После многих проблем, с которыми я сталкиваюсь, я могу обрабатывать события, возникающие в программе.
В моей предыдущей среде ASPX.NET я дважды щелкнул элемент управления <asp:Button.../> и автоматически в коде позади я вижу соответствующую процедуру.
И, конечно, каждый раз, когда я нажимаю кнопку, программа переходит к этой процедуре.и соответствующее событие click.
Теперь в MVC 4 я следую тому же процессу, но когда я пытаюсь нажать кнопку, программа никогда не переходит к процедуре.
Другой пример, когда у меня естьэлемент управления Label, и я хочу сделать его видимым или скрытым, тогда я использую

labelId.style.add(“Visibility”,”Hidden”) или «Видимый».

И еще один:

ValidationSummary.ValidationGroup

Теперь в MVC происходит то же самое, но до того, как я использую контроллер.
(Причина использования контроллера заключается в том, что я хочу перейти к процедуре asp:button on_click, поскольку программа отказывается проходить через событие.)
После процесса контроллера элемент управления Label оценивается, но он полностьюпустой, и с пустым элементом управления мы ничего не можем сделать.
То же самое происходит в ValidationSummary пусто, а затем выдает ошибку
То, что я сделал до сих пор
Когда я использую наследование web.UI.Page, программа выдает мне эту ошибку:

The view at '~ / Views / Home / Index.aspx' must derive from ViewPage

Поэтому я изменяю наследование на ViewPage
И я использую следующий Javescript для вызова контроллера:

 <script type="text/javascript">
function logSubmit() {
    var url = 'loginSubmit';
    $.ajax({
        type: 'GET',
        url: url,
        dataType: 'json',
    });
}
</script>

И от контроллера я использую эти инструкции в функции:

   Public Function loginSubmit() As JsonResult
      Dim routes As New RouteCollection With {.RouteExistingFiles = True}
      Return Json(New With {Key Attributes.logSubmit.LoginButton_Click}, JsonRequestBehavior.AllowGet)
   End Function

Когда это происходит, никакой контроль не работает с моим page.aspx

Есть кто-топомочь мне в этом вопросе?

1 Ответ

2 голосов
/ 19 марта 2019

Как сказано в комментариях, веб-формы Asp.net и Asp.Net MVC - это совершенно разные концепции. Я знаю, ты это знаешь. Веб-формы Asp.net работают на основе концепции кода, тогда как Asp.Net MVC имеет URL-адреса на основе маршрутов, что означает, что URL-адреса разделены на контроллеры и действия, и, кроме того, он основан на контроллере, а не на физическом файле. В веб-формах есть серверные элементы управления, но Asp.Net MVC придерживается настраиваемого синтаксиса (Razor по умолчанию). И снова, как сказано в комментариях, вы не можете изменить System.Web.UI.Page с System.Web.Mvc.ViewPage на существующей странице веб-форм ASPX. Таким образом, вы должны иметь свои представления, используя синтаксис бритвы. Из вашего вопроса, что я могу предложить, как показано ниже.

    // View.    
@ModelType ViewModel   //Model you want to bind to the view.
     @Using Html.BeginForm("Login", "Account", New With {.ReturnUrl = ViewBag.ReturnUrl}, FormMethod.Post) // we pass action name as first parameter and controller name as third parameter.
                @Html.AntiForgeryToken()
                @<text>
                    @Html.ValidationSummary(True, "", New With {.class = "text-danger"})
                    <div class="form-group">
                        @Html.LabelFor(Function(m) m.Email, New With {.class = "col-md-2 control-label"})
                        <div class="col-md-10">
                            @Html.TextBoxFor(Function(m) m.Email, New With {.class = "form-control"})
                            @Html.ValidationMessageFor(Function(m) m.Email, "", New With {.class = "text-danger"})
                        </div>
                    </div>
                    <div class="form-group">
                        @Html.LabelFor(Function(m) m.Password, New With {.class = "col-md-2 control-label"})
                        <div class="col-md-10">
                            @Html.PasswordFor(Function(m) m.Password, New With {.class = "form-control"})
                            @Html.ValidationMessageFor(Function(m) m.Password, "", New With {.class = "text-danger"})
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-md-offset-2 col-md-10">
                            <input type="submit" value="Log in" class="btn btn-default" />
                        </div>
                    </div>
                </text>
            End Using

А в контроллере.

    Public Class AccountController
        Inherits Controller
        <HttpPost>
        <AllowAnonymous>
        <ValidateAntiForgeryToken>
        Public Async Function Login(model As LoginViewModel, returnUrl As String) As Task(Of ActionResult)
            If Not ModelState.IsValid Then
                Return View(model)
            End If
// Your code logic
            Dim result = Await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout := False)
            Select Case result
                Case SignInStatus.Success
                    Return RedirectToLocal(returnUrl)
                Case SignInStatus.LockedOut
                    Return View("Lockout")
                Case SignInStatus.RequiresVerification
                    Return RedirectToAction("SendCode", New With {
                        returnUrl,
                        model.RememberMe
                    })
                Case Else
                    ModelState.AddModelError("", "Invalid login attempt.") // Because of this we can show the validation summary on view using  @Html.ValidationSummary
                    Return View(model)
            End Select
        End Function
    End Class

И модель есть.

//In your case model class is different.
Public Class LoginViewModel
    <Required>
    <Display(Name:="Email")>
    <EmailAddress>
    Public Property Email As String

    <Required>
    <DataType(DataType.Password)>
    <Display(Name:="Password")>
    Public Property Password As String

End Class

Я только что описал способ решения вашей проблемы, насколько я понимаю, из вашего вопроса.

...