ASP MVC onclick for button

时间:2013-12-29 12:52:09

标签: c# asp.net-mvc-4 razor webforms onclick

我刚开始玩ASP MVC,我来自Web Forms的背景。 我已经启动了一个MVC互联网应用程序,想知道一个按钮如何从控制器调用一个动作。在这里,我想使用随MVC Internet应用程序提供的登录示例。

的AccountController:

很多方法

登录视图:

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
    <legend>Log in Form</legend>
    <ol>
        <li>
            @Html.LabelFor(m => m.UserName)
            @Html.TextBoxFor(m => m.UserName)
            @Html.ValidationMessageFor(m => m.UserName)
        </li>
        <li>
            @Html.LabelFor(m => m.Password)
            @Html.PasswordFor(m => m.Password)
            @Html.ValidationMessageFor(m => m.Password)
        </li>
        <li>
            @Html.CheckBoxFor(m => m.RememberMe)
            @Html.LabelFor(m => m.RememberMe, new { @class = "checkbox" })
        </li>
    </ol>
    <input type="submit" value="Log in" />
</fieldset>

所以当我点击视图上的sumbit按钮时,会调用AccountController类中的哪个方法?你是如何解决的?

全部谢谢:)

3 个答案:

答案 0 :(得分:1)

当您单击提交按钮时,您发送一个帖子请求,并且在您的AccounController中应该调用此控制器操作:

[HttpPost]
public ActionResult Login(Usermodel model)
{

}

我建议你观看this教程,学习MVC控制器,动作和其他一些东西。这是一个很好的训练。

编辑:在MVC中,当您键入localhost/Home/Index之类的网址时,它首先会Home Controller并查找Index action,并且必须是[HttpGet]操作,因为您的请求是获取的请求。但是您不需要将Action标记为HttpGet属性,因为它是默认行为。由于您的RouteConfig,它的工作方式与此类似。如果查看您的控制器,您的控制器会返回视图HomeControllerAccountController您将看到返回视图的所有操作,如果您右键单击您的操作并单击转到视图,您将看到属于您的控制器的View

答案 1 :(得分:1)

我认为你在谈论默认的ASP.NET MVC模板,在这种情况下你会看到在Login.cshtml视图中,你在顶部定义了一个模型:

@model MyApp.Models.LoginModel

这会将您的视图绑定到此模型。当您执行POST时,它将从您的表单中收集名称与模型属性对应的html元素。

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
   ...
}

这里创建了一个html表单,用于发送/Account/Login的帖子。但是,您可以指定其他位置:

@using (Html.BeginForm("Index", "Home", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post)) {
   ...
}

在服务器端,您将期待相同的型号:

public ActionResult Login(LoginModel model, string returnUrl)
{
    // awesomeness ...
}

答案 2 :(得分:0)

  

我刚开始玩ASP MVC,我来自一个   Web表单的背景

使用按钮点击时的ajax帖子与aspx中的相同,url作为动作名称和控制器名称,这是你可以通过webforms获得的最接近的

$.ajax({
            url: '@Url.Action("SendMail", "Contact")',
            type: 'POST',
            data: { listID: selected.toString(), flag: flag },
            traditional: true,
            success: function (result) {

            }
        });

或者您可以在MVC中使用默认方式使用整个表单帖子

[HttpPost]
public ActionResult SendMail(Mail model)
{

}

因为你定义了

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {

在您的视图上,它将指向通过路径的默认操作,但您可以使用

更改显式定义所需操作名称和控制器名称的默认操作
@using (Html.BeginForm("ActionName", "ControllerName", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post)) {