如何将数据从一个视图传输到控制器然后再传输到另一个视图(MVC C#)?

时间:2019-05-05 13:17:51

标签: c# asp.net visual-studio razor model-view-controller

我正在制作银行网络应用。我有一个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视图。但是实际上发生了什么。

2 个答案:

答案 0 :(得分:0)

您可以做的是,在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>

答案 1 :(得分:-1)

能否将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);

        }
相关问题