MVC 4 Html.ActionLink未将参数传递给控制器​​

时间:2016-01-23 23:51:14

标签: asp.net-mvc-4 actionresult

我对MVC有点新,并尝试将登录页面重写为MVC。 我无法将参数传递给控制器​​中的ActionResult,进入的参数为null。

这是View

 <div class="form-group">
<div class="row">
@Html.TextBoxFor(model => model.UserName)
</div>
 </div>

<button class="btn btn-primary">
@Html.ActionLink("GO!", "AppList", "LogIn", new { @userName = Model.UserName}, null)
</button>

我正在尝试将用户名和密码传递给我的控制器。

  public ActionResult AppList(string userName)
        {
            return View();
        }

我查了一下其他帖子,我确定我正在使用适当的超载。

这里我添加了路由配置

  routes.MapRoute(
                name: "LogIn",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "LogIn", action = "Index", id = UrlParameter.Optional }
            );

这是我正在加载登录页面的actionResult

public ActionResult LogIn(string userName, string password)
        {
            ViewBag.LogInButton = "Log In";

            return View(new Login());
        }

并查看我指定模型

@model LogInPortal.Controllers.LogInController.Login

1 个答案:

答案 0 :(得分:0)

单击该链接将发出GET请求,但不会提交表单数据。您需要在表单中提交一个提交按钮以提交表单字段值

@model LogInPortal.Controllers.LogInController.Login
@using(Html.BeginForm("Login","AppList"))
{
  <div class="row">
    @Html.TextBoxFor(model => model.UserName)
  </div>
  <div class="row">
    @Html.TextBoxFor(model => model.Password)
  </div>
  <input type="submit" />
}

使用HttpPost属性

标记您的操作方法
[HttpPost]
public ActionResult LogIn(string userName, string password)
{
  // do something with the posted data and return something
}

或者您甚至可以使用相同的Login类对象作为参数。默认模型绑定器将发布的表单数据映射到该对象的属性值。

[HttpPost]
public ActionResult LogIn(Login model)
{
  // do something with model.UserName and model.Password
  // to do : return something
}