簡體   English   中英

如何將數據從一個視圖傳輸到控制器,然后再傳輸到另一個視圖(MVC C#)?

[英]How to transfer data from a View to a Controller then to another View (MVC C#)?

我正在制作銀行網絡應用程序。 我有一個BankView,可以在其中向表添加新用戶。 我可以通過打開AddUserView並將數據從TextBoxes傳輸到控制器,然后使用模型將該信息傳遞回BankView來做到這一點。 現在,在銀行視圖中,每個用戶名旁邊都有一個ViewUser按鈕,通過該按鈕可以將您轉移到強類型的ViewUser視圖,從而查看用戶。 我的問題是如何從表中獲取特定用戶並將此數據傳輸到Controller,以便隨后可以進入ViewUser視圖並查看有關該用戶的更多信息,即帳戶信息

我已經嘗試了許多來自互聯網的“解決方案”,例如,我嘗試使用ViewModel將數據從BankView傳輸到ViewUser View,但是在所有示例中,都使用了文本框,但是我試圖使用段落而不是段落來發送數據文本框,因為我不希望用戶能夠從BankView更改有關用戶的信息

這是我的銀行管理員

    public class BankController : Controller
    {
        //Global Variables
        public static List<UserViewModel> Users = new List<UserViewModel>();
        public static VaultViewModel VaultData = new VaultViewModel();
        public static BankViewModel BankData = new BankViewModel("Absa" , Users , VaultData);

        // GET: Bank
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Bank()
        {

            VaultData.Amount = 3500000;
            BankData.lsUsers = GenerateTestDataUsers();

            return View(BankData);
        }
        public ActionResult AddUser()
        {
            return View();
        }
        [HttpPost]
        public ActionResult AddUser(string Name , string Surname)
        {

            UserViewModel NewUser = new UserViewModel(Name, Surname);
            BankData.lsUsers.Add(NewUser);

            return View("Bank", new BankViewModel("Absa", BankData.lsUsers, VaultData));
        }

        [HttpPost]
        public ActionResult ViewUser(UserViewModel User)
        {

            string UserName = User.UserName;
            string UserSurname = User.UserSurname;

            return View(User);

        }

        //Methods
        private List<UserViewModel> GenerateTestDataUsers()
        {

            UserViewModel User1 = new UserViewModel("Shanah", "Suping");
            UserViewModel User2 = new UserViewModel("Jackson", "Parker");
            UserViewModel User3 = new UserViewModel("Jacqueline", "Rover");
            UserViewModel User4 = new UserViewModel("Cho", "Chan");
            UserViewModel User5 = new UserViewModel("Rendani", "Rambuda");

            Users.Add(User1);
            Users.Add(User2);
            Users.Add(User3);
            Users.Add(User4);
            Users.Add(User5);

            return (Users);

        }

    }

這是我的BankView


<div id="BankInfo">

    <h1>@Model.BankName</h1>
    <h2>Vault Total: R @Model.Vault.Amount</h2>




    <table>

        <tr>
            <th colspan="4" id="HeadUser">Users <span>@Html.ActionLink("+", "AddUser", "Bank")</span> </th>
        </tr>

        <tr>

            <th>UserID</th>
            <th>Name</th>
            <th>Surname</th>
            <th></th>

        </tr>

        @foreach (var User in Model.lsUsers)
        {

            <tr>
                <td>@User.UserID</td>
                <td>@User.UserName</td>
                <td>@User.UserSurname</td>
                <td>
                    @Html.BeginForm("ViewUser", "Bank", FormMethod.Post)
                    {
                    <input type="submit" value="View" id="ViewUser" name="ViewUser" />
                    }
                </td>
            </tr>

        }




    </table>

</div>

只是最后的澄清。 我正在嘗試將特定用戶轉到BankController,以便可以將該用戶信息查看到ViewUserView。

我希望能夠從BankView中獲取特定用戶並將該用戶轉移到ViewUser視圖。 但是實際上發生了什么。

您可以做的是,在foreach循環中更改銀行視圖。 您可以傳遞用戶ID並獲取有關Controllers邏輯的詳細信息並在視圖上顯示。

@foreach (var User in Model.lsUsers)
{

    <tr>
        <td>@User.UserID</td>
        <td>@User.UserName</td>
        <td>@User.UserSurname</td>
         <td>@Html.ActionLink("ViewUser", "ViewUser", new { id = @User.UserID }, new { @class = "btn btn-primary" })</td>
    </tr>

}

現在,如下所示修改您的操作方法。

    [HttpGet]
        public ActionResult ViewUser(string id)
        {
            UserViewModel User = GenerateTestDataUsers().Find(x => x.UserID == id);     
//In real life application you will be calling data service or entityframework

            return View(User);

        }

您的View用戶視圖將如下所示。

@model UserViewModel


<h2>ViewUser</h2>

<div>
    <h4>UserViewModel</h4>
    <hr />
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.UserName)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.UserName)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.UserSurname)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.UserSurname)
        </dd>

        <dt>
            @Html.DisplayNameFor(model => model.UserID)
        </dt>

        <dd>
            @Html.DisplayFor(model => model.UserID)
        </dd>

    </dl>
</div>
<p>

    @Html.ActionLink("Back to List", "Bank")
</p>

您可以將ViewUser方法的dataAnotation從HttPost更改為HttpGet嗎? 因為如果您嘗試檢索用戶,那么在那里放置HttpPost就沒有意義了

因此,請嘗試替換:

   [HttpPost]
        public ActionResult ViewUser(UserViewModel User)
        {

            string UserName = User.UserName;
            string UserSurname = User.UserSurname;

            return View(User);

        }

這樣

[HttpGet]
        public ActionResult ViewUser(UserViewModel User)
        {

            string UserName = User.UserName;
            string UserSurname = User.UserSurname;

            return View(User);

        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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