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