在单步执行代码后,我已经验证了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"}
);
答案 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',它们与您要发布的表单元素的名称相匹配,因此它们包含的数据将绑定到这些变量。