为什么我的帖子参数没有进入我的控制器?

时间:2012-09-14 17:29:46

标签: c# asp.net-mvc-2 post

在单步执行代码后,我已经验证了collection.Get(“username”);在下面的代码中为null,这意味着我的post参数只是没有进入控制器。有谁能发现问题?

控制器:

public ActionResult Admin(uint id, FormCollection collection) {
    var username = collection.Get("username");
    var password = collection.Get("password");
    Helper.CreateUser(username,password);
    return View("AdministerUsers");
}

查看:

<% using (Html.BeginForm()){ %>
    <fieldset>
    <legend>Fields</legend>
    <label for="username">username</label>
    <%= Html.TextBox("username") %>
    <label for="password">password:</label>
    <%= Html.TextBox("password") %>
    </fieldset>
    <input type="submit" value="Add User" name="submitUser" />
<% } %>

路由:

routes.MapRoute(
    "Admin",
    "Admin/{id}",
    new { controller = "Administration", action = "Admin"}
);

2 个答案:

答案 0 :(得分:1)

您可以使用asp.net mvc方式并强烈地将视图输入模型

型号:

 public class ViewModel
    {
      public string Username {get; set;}
      public string Password {get; set;}
    }

强烈输入您的观点:

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<ViewModel>" %>  //the ViewModel will need to have it's fully qualified name here

然后使用mvc的默认模型绑定:

<% using (Html.BeginForm()){ %>

    <%= Html.LabelFor(m => m.Username) %>
    <%= Html.TextBoxFor(m => m.Username) %>

    <%= Html.Label(m => m.Password) %>
    <%= Html.TextBoxFor(m => m.Password) %>

    <input type="submit" value="Add User" name="submitUser" />
<% } %>

控制器:

[HttpPost]
public ActionResult Admin(ViewModel model) 
{
    var username = model.Username;
    var password = model.Password;
    Helper.CreateUser(username,password);
    return View("AdministerUsers");
}

答案 1 :(得分:0)

FormCollection没有与用户名或密码对应的属性; MVC绑定使用反射查看对象以确定发布数据绑定的位置。

因此,在您的情况下,切换到此签名应该可以解决您的问题:

 public ActionResult Admin(uint id, string username, string password)
 {
      // .. Do your stuff
 }

由于参数包含'username'和'password',它们与您要发布的表单元素的名称相匹配,因此它们包含的数据将绑定到这些变量。