【问题标题】:How to transfer data from a View to a Controller then to another View (MVC C#)?如何将数据从视图传输到控制器,然后再传输到另一个视图(MVC C#)?
【发布时间】:2019-09-23 07:56:28
【问题描述】:

我正在制作一个银行网络应用程序。我有一个 BankView,可以在其中将新用户添加到表中。我可以通过打开 AddUserView 并将数据从 TextBoxes 传输到控制器,然后使用模型将此信息传递回 BankView 来做到这一点。现在在银行视图中,每个用户名旁边都有一个 ViewUser 按钮,允许您通过将您转移到强类型 ViewUser 视图来查看用户。我的问题是如何从表中获取特定用户并将此数据传输到控制器,以便我可以转到 ViewUser 视图并查看有关用户的更多信息,即帐户信息

我尝试了许多来自互联网的“解决方案”,例如,我尝试使用 ViewModel 将数据从 BankView 传输到 ViewUser 视图,但在所有示例中,都使用了文本框,但我尝试使用段落而不是文本框,因为我不希望用户能够从 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);

        }

    }

这是我的银行视图


<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 视图。但实际发生的一切都没有。

【问题讨论】:

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


    【解决方案1】:

    您可以做的是,在 foreach 循环中更改您的银行视图。您可以只传递用户的 id 并获取有关控制器逻辑的详细信息并显示在视图上。

    @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 User 的看法将如下所示。

    @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>
    

    【讨论】:

    • 这很棒。它解决了我的问题。我想做的唯一另一件事是使用按钮而不是操作结果。这可能吗? submit 类型的输入是否接受 actionLink 之类的参数?
    • 检查我的更新答案。您可以为 css 类传递新参数
    • 完美。我所有的问题都解决了。非常感谢!
    【解决方案2】:

    您能否将 ViewUser 方法的 dataAnnotation 从 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);
    
            }
    

    【讨论】:

      猜你喜欢
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多