我正在一个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
的任何控件都无法起作用
在这个问题上有人可以帮助我吗?
答案 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
我只是根据您的问题描述了如何处理您的问题。