0

单步执行我的代码后,我已经验证了 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"}
);
4

2 回答 2

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");
}
于 2012-09-14T18:02:16.557 回答
0

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

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

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

由于参数包含“用户名”和“密码”,它们与您发布的表单元素的名称相匹配,因此它们包含的数据将绑定到这些变量。

于 2012-09-14T17:33:06.620 回答