将模型从我的视图传递给控制器时,数据全部为空。我能够使用ActionLink
成功传递它,但我不认为这是最好的方式;出于安全原因(我不想在查询字符串中使用敏感数据)。
我的模特
public class DashboardModel
{
// Dasboard quick numbers
public int TotalUsers { get; set; }
public int TotalUnauthUsers { get; set; }
public int GamesPlayed { get; set; }
public int AssociatedGroups { get; set; }
public int TotalGroups { get; set; }
// Dashboard table
public IEnumerable<ManageUserData> UnauthUsers { get; set; }
}
public class ManageUserData
{
public string UserName { get; set; }
public int AlternateId { get; set; }
public string Email { get; set; }
public string Role { get; set; }
public IEnumerable<string> InvestigatorGroups { get; set; }
public string Institution { get; set; }
// User status
public bool AccountLocked { get; set; }
public bool EmailConfirmed { get; set; }
}
我的观点片段
@model TestGame.ViewModels.DashboardModel
@foreach (var user in Model.UnauthUsers)
{
<tr>
<td>@user.UserName</td>
<td>@user.AlternateId</td>
<td>@user.Email</td>
<td>@user.Role</td>
<td>
@if (!user.EmailConfirmed)
{
<div class="text-warning">Unconfirmed Email</div>
}
@if (user.AccountLocked)
{
<div class="text-danger">Account Locked</div>
}
</td>
<td>
@if (user.AccountLocked || !user.EmailConfirmed)
{
using (Html.BeginForm("Manage", "Admin", FormMethod.Post))
{
@Html.HiddenFor(x => user.UserName)
@Html.HiddenFor(x => user.Email)
<input type="submit" value="Manage" />
答案 0 :(得分:1)
您必须确保路径以要回发的对象开始;如果发布到(HttpPost管理/管理操作)的操作采用User类型的对象,那么您所拥有的将会很有效;如果需要模型类型的对象,请将表单更改为以下内容:
for (var i = 0; i < Model.UnAuthUsers.Count; i++)
using (Html.BeginForm("Manage", "Admin", FormMethod.Post))
{
@Html.HiddenFor(x => x.UnAuthUsers[i].UserName)
@Html.HiddenFor(x => x.UnAuthUsers[i].Email)
<input type="submit" value="Manage" />
从模型中创建一个引用(是x)就可以了。
编辑:根据评论,为您的模型添加两个属性:
public class DashboardModel
{
public string SelectedUserName { get; set; }
public string SelectedEmail { get; set; }
}
在您的表单中,为该名称渲染一个隐藏的内容;我使用HiddenFor时遇到了麻烦,所以我过去直接使用了隐藏的内容:
using (Html.BeginForm("Manage", "Admin", FormMethod.Post))
{
<input type="hidden" name="@Html.NameFor(i => i.SelectedUserName)" value="@Model.UnauthUsers[i].UserName" />
<input type="hidden" name="@Html.NameFor(i => i.SelectedEmail)" .. />
在提交表单后,该表单中的用户将通过这些新属性通过模型回发。