Here is a picture how it lists all phone numbers from all users when I hover over the user account.Pass UserID Parameter in Foreach-Schleifen mit Popover Inhalt
Ich erstelle ein MVC-Projekt mit ASP.NET und Razor mit durch "@foreach (var Artikel in Model)" alle Benutzer in der Warteschlange. In dieser Tabelle möchte ich ein Popover verwenden, das die Telefonnummern des Benutzers anzeigt, die sich einmal über dem Namen des Accounts (Dealer genannt) befinden. Es listet derzeit alle Telefone aller Benutzer auf, aber ich möchte, dass sie für diesen Benutzer spezifisch sind. Ich habe versucht, ActionLinks (wie ich den gleichen Parameter für Bearbeiten, Details und Löschen übergeben) sowie Tags, aber beide scheinen nicht zu funktionieren. Wie kann ich den UserID-Parameter übergeben, um das Popover so zu beschränken, dass nur die Telefonnummern aufgelistet werden, die mit einem bestimmten Benutzer verknüpft sind?
Hier ist der Code für die Tabelle ist:
<table>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Dealer)
</td>
<td>
<a href="#" data-toggle="popover" title="Phones">@Html.DisplayFor(modelItem => item.UserName)</a>
<div id="phone-content" style="display: none">
@foreach (var phone in Model)
{
//Using ActionLinks
@Html.ActionLink("Mobile", "ListPhones", new { id = item.Id })<br />
@Html.ActionLink("Business", "ListPhones", new { id = item.Id })<br />
@Html.ActionLink("Fax", "ListPhones", new { id = item.Id })<br>
//Using <a href> tags
<a href="tel:@phone.PhoneMobile">@Html.DisplayFor(modelItem => phone.PhoneMobile)</a><br />
<a href="tel:@phone.PhoneBus">@Html.DisplayFor(modelItem => phone.PhoneBus)</a><br />
<a href="tel:@phone.PhoneFax">@Html.DisplayFor(modelItem => phone.PhoneFax)</a><br />
}
</div>
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.Id })<br />
@Html.ActionLink("Details", "Details", new { id = item.Id })<br />
@Html.ActionLink("Delete", "Delete", new { id = item.Id })
</td>
</tr>
}
</table>
In der Steuerung habe ich eine neue Klasse der Telefoninformationen und versucht, das Bestehen der Parameter dort aufzulisten. Hier ist der Code ein Benutzer in der Steuerung für die Bearbeitung, die korrekt den Parameter übergibt:
public async Task<ActionResult> Edit(string id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var user = await UserManager.FindByIdAsync(id);
if (user == null)
{
return HttpNotFound();
}
var userRoles = await UserManager.GetRolesAsync(user.Id);
return View(new AdminEditUserViewModel()
{
Id = user.Id,
Dealer = user.Dealer,
UserName = user.UserName,
FirstName = user.FirstName,
LastName = user.LastName,
Address = user.Address,
City = user.City,
State = user.State,
Zip = user.Zip,
Email = user.Email,
PhoneMobile = user.PhoneMobile,
PhoneBus = user.PhoneBus,
PhoneExt = user.PhoneExt,
PhoneFax = user.PhoneFax,
RolesList = RoleManager.Roles.ToList().Select(x => new SelectListItem()
{
Selected = userRoles.Contains(x.Name),
Text = x.Name,
Value = x.Name
})
});
}
//
// POST: /Users/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit([Bind(Include = "Dealer,UserName,FirstName,LastName,Address,City,State,Zip,Email,PhoneMobile,PhoneFax,PhoneBus,PhoneExt,Id")]
AdminEditUserViewModel editUser, params string[] selectedRole)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindByIdAsync(editUser.Id);
if (user == null)
{
return HttpNotFound();
}
user.Dealer = editUser.Dealer;
user.UserName = editUser.UserName;
user.FirstName = editUser.FirstName;
user.LastName = editUser.LastName;
user.Address = editUser.Address;
user.City = editUser.City;
user.State = editUser.State;
user.Zip = editUser.Zip;
user.Email = editUser.Email;
user.PhoneMobile = editUser.PhoneMobile;
user.PhoneBus = editUser.PhoneBus;
user.PhoneExt = editUser.PhoneExt;
user.PhoneFax = editUser.PhoneFax;
var userRoles = await UserManager.GetRolesAsync(user.Id);
selectedRole = selectedRole ?? new string[] { };
var result = await UserManager.AddToRolesAsync(user.Id, selectedRole.Except(userRoles).ToArray<string>());
if (!result.Succeeded)
{
ModelState.AddModelError("", result.Errors.First());
return View();
}
result = await UserManager.RemoveFromRolesAsync(user.Id, userRoles.Except(selectedRole).ToArray<string>());
if (!result.Succeeded)
{
ModelState.AddModelError("", result.Errors.First());
return View();
}
return RedirectToAction("Index");
}
ModelState.AddModelError("", "Something failed.");
return View();
}
Versus den Code für die Auflistung der Telefone in der Steuerung:
public async Task<ActionResult> ListPhones(string id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var user = await UserManager.FindByIdAsync(id);
if (user == null)
{
return HttpNotFound();
}
return View(new AdminEditUserViewModel()
{
Id = user.Id,
PhoneMobile = user.PhoneMobile,
PhoneBus = user.PhoneBus,
PhoneExt = user.PhoneExt,
PhoneFax = user.PhoneFax
});
}
Vielen Dank für Ihre Eingabe. Das Problem ist jedoch, dass ich glaube, dass die href # sein sollte, so dass das Popover angeklickt werden kann, ohne auf die neue Seite umzuleiten. Die Art der Einrichtung besteht darin, dass Sie den Mauszeiger über einen Benutzer halten können, um alle mit dem Benutzer verknüpften Telefone anzuzeigen. Klicken Sie dann jedoch auf den Benutzer, um ihn beizubehalten, und klicken Sie auf eine der Nummern. Ich habe versucht, mit Ihrem Vorschlag herumzuspielen, aber von dem, was ich verstehe, wird das immer auf diese Seite umleiten, anstatt das Popover zu öffnen. – MAXXtreme