簡體   English   中英

將模型從視圖傳遞到控制器(MVC)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM