page.aspx和(page.aspx.vb)背后的代码存在关系问题

时间:2019-03-14 21:47:53

标签: javascript ajax vb.net asp.net-mvc-4

我正在一个Web项目中,我决定从ASP.NET上交MVC4。
在遇到许多问题之后,我可以处理程序中引发的事件。
在以前的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 个答案:

答案 0 :(得分:2)

正如评论所说,Asp.net Web表单和Asp.Net MVC是完全不同的概念。我知道你知道Asp.net Web表单在概念背后的代码上工作,而Asp.Net MVC具有基于路由的URL,这意味着URL被分为控制器和动作,而且它基于控制器而不是物理文件。在Web表单中,有服务器控件,但是Asp.Net MVC遵循可自定义的语法(默认为Razor)。再次如评论所述,您不能在现有ASPX Web表单页面中使用System.Web.Mvc.ViewPage更改System.Web.UI.Page。因此,您需要使用razor语法获取视图。从您的问题中,我可以建议如下。

    // 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

我只是根据您的问题描述了如何处理您的问题。