我的视图中有以下输入,我想将它们传递给控制器:
<div>
<span><label>Username</label></span>
<span><input type="text" class="textbox" id="username"></span>
</div>
<div>
<span><label>Password</label></span>
<span><input type="password" class="password" id="password"></span>
</div>
这是我的控制器方法,以便对特定用户进行身份验证:
public ActionResult LoginMethod(string username, string password)
{
if (username == "admin" && password == "admin1")
{
return RedirectToAction("Home");
}
else
{
return RedirectToAction("Login");
}
}
答案 0 :(得分:4)
如果您想保持控制器操作并查看相同内容,只需添加name
属性以匹配您的操作参数,他们就会传递数据:
<input type="text" class="textbox" id="username" name="username">
<input type="password" class="password" id="password" name="password">
但是我建议使用强类型视图模型,因为错误的空间较小,可以更好地使用框架。
为此,您需要执行以下操作:
创建一个包含属性的类,并为标签添加DisplayName
属性:
public class FooViewModel
{
[DisplayName("Username")]
public string Username { get; set; }
[DisplayName("Password")]
public string Password { get; set; }
}
向视图添加模型指令,并使用HtmlHelpers
代替html输入:
@model FooViewModel
<div>
<span>@Html.LabelFor(x => x.Username)</span>
<span>@Html.TextBoxFor(m=> m.Username)</span>
</div>
<div>
<span>@Html.LabelFor(x => x.Password)</span>
<span>@Html.PasswordFor(m=> m.Password)</span>
</div>
然后将您的操作更改为:
public ActionResult LoginMethod(FooViewModel model)
{
if (model.Username == "admin" && model.Password == "admin1")
{
return RedirectToAction("Home");
}
else
{
return RedirectToAction("Login");
}
}
答案 1 :(得分:1)
通常最好使用viewmodel将数据发回,这也可以让你做一些验证。
所以你定义一个模型:
public class MyViewModel
{
[Required]
[StringLength(50)]
[Display(Name = "Username")]
public string Username { get; set; }
[Required]
[StringLength(50)]
[Display(Name = "Password")]
public string Passsword { get; set; }
}
所以你的标记变成了:
@model MyViewModel
@using(Html.BeginForm())
{
<div>
<span>@Html.LabelFor(m => m.Username)</span>
<span>@Html.TexboxFor(m => m.Username)</span>
Html.ValidationMessageFor(x => x.Username)
</div>
<div>
<span>@Html.LabelFor(m => m.Password)</span>
<span>@Html.PasswordFor(m => m.Password)</span>
Html.ValidationMessageFor(x => x.Password)
</div>
}
你的控制器动作是:
public ActionResult LoginMethod(MyViewModel myViewModel)
{
if (myViewModel.Username == "admin" && myViewModel.Password == "admin1")
{
return RedirectToAction("Home");
}
else return RedirectToAction("Login");
}
您可以通过设置name属性以匹配操作的参数或viewmodel的属性来使其工作,但使用viewmodel和helper更加健壮,更容易重构,再加上验证。
答案 2 :(得分:0)
首先,你应该把输入放在像
这样的形式中<% Html.BeginForm("LoginMethod", "Authentication");%>
Username: <input type="text" id="username" name="username" />
Password: <input type="password" id="password" name="password" />
<input type="submit" id="Go" value="Post" />
<% Html.EndForm();%>
或者您可以使用<%: Html.TextBoxFor(m => m.UserName) %>
代替html输入。
这里是您的Controller方法;
public ActionResult LoginMethod(string username,string password)
{
**do your stuff!
}