[英]Pass model from a view to a controller (MVC)
將模型從我的視圖傳遞到控制器時,數據全為空。 我可以使用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" />
您必須確保路徑以要回發的對象開頭; 如果要發布到的操作(HttpPost Admin / Manage操作)采用類型為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)" .. />
提交表單后,該表單中的用戶將通過模型以及這些新屬性回發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.