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