How to change the display of #Html.DisplayNameFor(model => model.name) - c#

I made a DataBase Fisrt MVC project and I'm having some issues with this.
This is the Index of one of my Views:
And for example, I would like
#Html.DisplayNameFor(model => model.name)
to be displayed as "User" instead of "name".
How can I do this?
Thanks in advance.
#model IEnumerable<dispensario.pacientes>
#{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
#Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
#Html.DisplayNameFor(model => model.name)
</th>
<th>
#Html.DisplayNameFor(model => model.cedula)
</th>
<th>
#Html.DisplayNameFor(model => model.carnet)
</th>
<th>
#Html.DisplayNameFor(model => model.tipo_paciente)
</th>
<th>
#Html.DisplayNameFor(model => model.estado)
</th>
<th></th>
</tr>
#foreach (var item in Model) {
<tr>
<td>
#Html.DisplayFor(modelItem => item.name)
</td>
<td>
#Html.DisplayFor(modelItem => item.cedula)
</td>
<td>
#Html.DisplayFor(modelItem => item.carnet)
</td>
<td>
#Html.DisplayFor(modelItem => item.tipo_paciente)
</td>
<td>
#Html.DisplayFor(modelItem => item.estado)
</td>
<td>
#Html.ActionLink("Edit", "Edit", new { id=item.idPaciente }) |
#Html.ActionLink("Details", "Details", new { id=item.idPaciente }) |
#Html.ActionLink("Delete", "Delete", new { id=item.idPaciente })
</td>
</tr>
}
</table>

You can add DisplayName attribute to your viewmodel.
[DisplayName("User")]
public string name { get; set; }
In your view:
#Html.DisplayNameFor(model => model.name)
Or you can just write "User" to view instead of html helper.
i.e. in your view:
<th>User</th>

Add DisplayName Attribute to your property to change the display name in your model
[DisplayName("User")]
public string name { get; set; }

I had the same "problem" and to properly use the Data Annotation [DisplayName("User")] in Visual Studio Code I had to add the using System.ComponentModel; to my model file. Without this using I could not compile successfully. Hope this tip could help someone

Related

delete, edit, and details for a user in admin controller MVC 5

In my app, I am trying to add create, edit, delete, and details actions.
the Create action seems working just fine. However, in the delete action I have the following:
[HttpPost]
public async Task<ActionResult> DeleteAspUsers(string id)
{
//this is the users model
AspUsers users = new AspUsers();
var userStore = new UserStore<IdentityUser>();
var userManager = new UserManager<IdentityUser>(userStore);
IdentityUser theUser = new IdentityUser() { Id = users.ID };
theUser = userManager.FindById(theUser.Id);
if (theUser != null)
{
IdentityResult result = await userManager.DeleteAsync(theUser);
}
else
{
ModelState.AddModelError("", "user was not found");
}
return RedirectToAction ("GetAllUsers/");
}
and the view for getting all users in a table as the following:
#model IEnumerable<IdentityUser>
#using Microsoft.AspNet.Identity.EntityFramework;
#using Microsoft.AspNet.Identity.Owin;
#using Microsoft.AspNet.Identity;
#using RidesApp.Controllers;
#using RidesApp.Models;
#{
ViewBag.Title = "GetAllUsers";
Layout = "~/Views/Shared/AdminsLayout.cshtml";
}
<h2>GetAllUsers</h2>
<p>
#Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
#Html.DisplayNameFor(model => model.Id)
</th>
<th>
#Html.DisplayNameFor(model => model.Email)
</th>
<th>
#Html.DisplayNameFor(model => model.EmailConfirmed)
</th>
<th>
#Html.DisplayNameFor(model => model.PhoneNumber)
</th>
<th>
#Html.DisplayNameFor(model => model.PhoneNumberConfirmed)
</th>
<th>
#Html.DisplayNameFor(model => model.TwoFactorEnabled)
</th>
<th>
#Html.DisplayNameFor(model => model.LockoutEndDateUtc)
</th>
<th>
#Html.DisplayNameFor(model => model.LockoutEnabled)
</th>
<th>
#Html.DisplayNameFor(model => model.AccessFailedCount)
</th>
<th>
#Html.DisplayNameFor(model => model.UserName)
</th>
<th></th>
</tr>
#foreach (var item in Model)
{
<tr>
<td>
#Html.DisplayFor(modelItem => item.Id)
</td>
<td>
#Html.DisplayFor(modelItem => item.Email)
</td>
<td>
#Html.DisplayFor(modelItem => item.EmailConfirmed)
</td>
<td>
#Html.DisplayFor(modelItem => item.PhoneNumber)
</td>
<td>
#Html.DisplayFor(modelItem => item.PhoneNumberConfirmed)
</td>
<td>
#Html.DisplayFor(modelItem => item.TwoFactorEnabled)
</td>
<td>
#Html.DisplayFor(modelItem => item.LockoutEndDateUtc)
</td>
<td>
#Html.DisplayFor(modelItem => item.LockoutEnabled)
</td>
<td>
#Html.DisplayFor(modelItem => item.AccessFailedCount)
</td>
<td>
#Html.DisplayFor(modelItem => item.UserName)
</td>
<td>
#Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
#Html.ActionLink("Details", "Details", new { id = item.Id }) |
#Html.ActionLink("Delete", "DeleteAspUsers", new {id= item.Id})
</td>
</tr>
}
</table>
I was trying to use the " AspUsers" model that I have but I got an error, so I tried to use the (#model IEnumerable ) and that worked. However, when I click delete I'm getting a "404" error that it wasn't found.
I was generally use my own dtatbase (connecting it from an sql server). I added the Identity to an existing application.
So, basically I have my own tables for the users but now I have the aspnetUsers and other tables which was generated after adding the identity framework. this is my current tables:
I'm Also wondering how would I generate the edit and display the users details in the "details" action.
I would appreciate any help. Thank you.
try using
return RedirectToAction ("GetAllUsers");
instead of
return RedirectToAction ("GetAllUsers/");

How to add front-end(html/css) on my ASP.NET MVC Application

This is my .cshtml file that contain table of items. This table shows items that are for sale, and I want to add background image in this file. If it does not working please tell me how to attach background for this.
I know cshtml is the file extension that refers to the razor view engine. In addition to straight html, these files also contain C# code that is compiled on the server prior to the pages being server up to the browser.
#model IEnumerable<PakMall.Models.UserItem>
#{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
#Html.ActionLink("Create New", "Create")
#using (Html.BeginForm("Index", "userItems", FormMethod.Get))
{
<p>
Discription: #Html.DropDownList("discription", "All")
Title: #Html.TextBox("SearchString")
<input type="submit" value="Filter" />
</p>
}
</p>
<table class="table">
<tr>
<th>
#Html.DisplayNameFor(model => model.Title)
</th>
<th>
#Html.DisplayNameFor(model => model.ManufacturingDate)
</th>
<th>
#Html.DisplayNameFor(model => model.Discription)
</th>
<th>
#Html.DisplayNameFor(model => model.Price)
</th>
<!-- <th>
#Html.DisplayNameFor(model => model.itemImage)
</th>-->
<th>
#Html.DisplayNameFor(model => model.Contact)
</th>
<th>
#Html.DisplayNameFor(model => model.Email)
</th>
</tr>
#foreach (var item in Model)
{
<tr>
<td>
#Html.DisplayFor(modelItem => item.Title)
</td>
<td>
#Html.DisplayFor(modelItem => item.ManufacturingDate)
</td>
<td>
#Html.DisplayFor(modelItem => item.Discription)
</td>
<td>
#Html.DisplayFor(modelItem => item.Price)
</td>
<td>
#Html.DisplayFor(modelItem => item.Contact)
</td>
<td>
#Html.DisplayFor(modelItem => item.Email)
</td>
<td>
#Html.ActionLink("Edit", "Edit", new { id = item.ID })
#Html.ActionLink("Details", "Details", new { id = item.ID })
#Html.ActionLink("Delete", "Delete", new { id = item.ID })
</td>
</tr>
}
</table>
You can accomplish this by using the background-image css class:
body {
background-image: url("img_tree.gif");
}
This article is a good place to start.
In _Layout.cshtml I added background image in like html format.
So _Layout.cshtml is file in .net web application where all pages layout can be designed.

ASP.NET MVC Two models in ove view, code change

I had this code and it worked fine:
#model IEnumerable<Moviestore.Models.Movie>
#{
ViewBag.Title = "Index";
}
<p>
#Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
#Html.DisplayNameFor(model => model.Title)
</th>
<th>
#Html.DisplayNameFor(model => model.Genre)
</th>
<th>
#Html.DisplayNameFor(model => model.Author)
</th>
<th>
#Html.DisplayNameFor(model => model.Year)
</th>
<th></th>
</tr>
#foreach (var item in Model) {
if (item.IsDeleted == 0)
{
<tr>
<td>
#Html.DisplayFor(modelItem => item.Title)
</td>
<td>
#Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
#Html.DisplayFor(modelItem => item.Author)
</td>
<td>
#Html.DisplayFor(modelItem => item.Year)
</td>
<td>
#Html.ActionLink("Edit", "Edit", new { id = item.MovieID }) |
#Html.ActionLink("Details", "Details", new { id = item.MovieID }) |
#Html.ActionLink("Delete", "Delete", new { id = item.MovieID })
</td>
</tr>
}
}
</table>
But I needed to add one more model, I done that with Tuple In this way:
#using Moviestore.Models;
#model Tuple<Movie, User>
#{
ViewBag.Title = "Index";
}
<p>
#Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
#Html.DisplayNameFor(tuple => tuple.Item1.Title)
</th>
<th>
#Html.DisplayNameFor(tuple => tuple.Item1.Genre)
</th>
<th>
#Html.DisplayNameFor(tuple => tuple.Item1.Author)
</th>
<th>
#Html.DisplayNameFor(tuple => tuple.Item1.Year)
</th>
<th></th>
</tr>
#foreach (var item in Model) {
if (item.IsDeleted == 0)
{
<tr>
<td>
#Html.DisplayFor(modelItem => item.Title)
</td>
<td>
#Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
#Html.DisplayFor(modelItem => item.Author)
</td>
<td>
#Html.DisplayFor(modelItem => item.Year)
</td>
<td>
#Html.ActionLink("Edit", "Edit", new { id = item.MovieID }) |
#Html.ActionLink("Details", "Details", new { id = item.MovieID }) |
#Html.ActionLink("Delete", "Delete", new { id = item.MovieID })
</td>
</tr>
}
}
</table>
But now I have problem with bottom half of code.
From #foreach
I don't know what I need to put instead of #foreach (var item in Model)
And will then #Html.DisplayFor(modelItem => item.Title) also need some changes.
Sorry for long post, I tried to explain the problem as best as I can.
As I mentioned in the comments, the appropriate way to handle this situation (needing more than one model on a particular View page) is to use a ViewModel which contains the models you need (see here for reference).
To answer your specific question, though, you can access each item of the Tuple by its position, e.g. if your model is Tuple<Movie, User>, then you can access the Movie object by model.Item1 and the User object by model.Item2, etc.
But I strongly recommend you take the ViewModel approach that I linked instead.
Hi here is the viewmodel for your requirement:
public class MovieUserViewModel
{
public IEnumerable<Movie> Movie { get; set; }
public IEnumerable<Users> Users { get; set; }
}
With the above viewmodel , you can easily access each class
#foreach (var item in Model.Movie)
#foreach (var item in Model.Users)
Additional info : Understanding ViewModel in ASP.NET MVC
Thanks
Karthik

How to add a where clause when returning a list in a view Mvc5

Is it possible to add a where clause in the view rather than the controller as I don't want to change the retrieval of information in the controller. I currently am retrieving a list of restaurants but want to only show restaurants where the logged in users email is the same as the restaurants email.
<div class="col-xs-12">
<table class="table table-condensed table-striped">
<tr>
<th>
#Html.DisplayNameFor(model => model.Rating)
</th>
<th>
#Html.DisplayNameFor(model => model.RestaurantName)
</th>
<th>
#Html.DisplayNameFor(model => model.County)
</th>
<th>
#Html.DisplayNameFor(model => model.RestaurantType)
</th>
<th></th>
</tr>
#foreach (var item in Model)
{
<tr>
<td>
#Html.DisplayFor(modelItem => item.Rating)
</td>
<td>
#Html.DisplayFor(modelItem => item.RestaurantName)
</td>
<td>
#Html.DisplayFor(modelItem => item.County)
</td>
<td>
#Html.DisplayFor(modelItem => item.RestaurantType)
</td>
<td>
#Html.ActionLink("Edit", "Edit", new { id = item.RestaurantID }) |
#Html.ActionLink("Details", "Details", new { id = item.RestaurantID }) |
#Html.ActionLink("Delete", "Delete", new { id = item.RestaurantID })
</td>
</tr>
}
</table>
</div>
If you really don't want to change the logic for retrieving the list, you could use a ViewModel with a List property, returning the specified list using the Getter.
public List<Restaurant> MyRestaurants
{
get { return Restaurants.Where(x => x.RestaurantEmail == UserEmail); }
}

Generate Rotativa PDF after LINQ search

I'm using MVC 4 and using rotativa PDF to generate a pdf from a view.
The problem is that the view in question is a result of a LINQ search, and in the pdf it doesn't appear the data.
This is where the user fill the box with what he wants to search:
First
After he clicks "Pesquisar"(search) this view is created:
Second
But when the pdf is generated, it doesn't show any data.
What can i do or what is the error?
The code:
Controller (the LINQ code works):
public ActionResult ViewAfterSearch(string texto)
{
var util = (db.Simulacaos.Where(m =>
m.Utilizador.Contains(texto)));
return View("ViewAfterSearch", util);
}
public ActionResult ViewBeforeSearch()
{
return View(db.Simulacaos.ToList());
}
[HttpPost, ActionName("ViewBeforeSearch")]
public ActionResult ViewBeforeSearch(string texto)
{
var util = (db.Simulacaos.Where(m =>
m.Utilizador.Contains(texto)));
return View("ViewAfterSearch", util);
}
Views:
#model IEnumerable<GestorSalas.Models.Simulacao>
#{
ViewBag.Title = "Registos";
}
<h2>ViewAfterSearch</h2>
<table>
<tr>
<th>
#Html.DisplayNameFor(model => model.Utilizador)
</th>
<th>
#Html.DisplayNameFor(model => model.TipoUtilizador)
</th>
<th>
#Html.DisplayNameFor(model => model.Codigo)
</th>
<th>
#Html.DisplayNameFor(model => model.Hora)
</th>
<th>
Entrou?
</th>
<th></th>
</tr>
#foreach (var item in Model)
{
<tr>
<td>
#Html.DisplayFor(modelItem => item.Utilizador)
</td>
<th>
#Html.DisplayFor(modelItem => item.TipoUtilizador)
</th>
<td>
#Html.DisplayFor(modelItem => item.Codigo)
</td>
<td>
#Html.DisplayFor(modelItem => item.Hora)
</td>
<td>
#Html.DisplayFor(modelItem => item.Entrar)
</td>
</tr>
}
</table>
<h4>#Html.ActionLink("Download como PDF", "TurnToPDF", "Simulacao")</h4>
<h4>#Html.ActionLink("Voltar", "Index", "Simulacao")</h4>
View before search:
#model IEnumerable<GestorSalas.Models.Simulacao>
#{
ViewBag.Title = "Index";
}
<h4>Procurar registo de utilizadores</h4>
using (Html.BeginForm("ViewAfterSearch", "Simulacao", FormMethod.Post))
{
<table>
<tr>
<th>
#Html.TextBox("texto")
</th>
<td>
<input type="submit" id="ButtonProcura" value="Procurar" />
</td>
</tr>
</table>
}
#Html.ActionLink("Download como PDF", "TurnToPDF", "Simulacao")
<table>
<tr>
<th>
#Html.DisplayNameFor(model => model.Utilizador)
</th>
<th>
#Html.DisplayNameFor(model => model.TipoUtilizador)
</th>
<th>
#Html.DisplayNameFor(model => model.Codigo)
</th>
<th>
#Html.DisplayNameFor(model => model.Hora)
</th>
<th>
Entrou?
</th>
<th></th>
</tr>
#foreach (var item in Model) {
<tr>
<td>
#Html.DisplayFor(modelItem => item.Utilizador)
</td>
<th>
#Html.DisplayFor(modelItem => item.TipoUtilizador)
</th>
<td>
#Html.DisplayFor(modelItem => item.Codigo)
</td>
<td>
#Html.DisplayFor(modelItem => item.Hora)
</td>
<td>
#Html.DisplayFor(modelItem => item.Entrar)
</td>
<td>
#Html.ActionLink("Edit", "Edit", new { id=item.SimulacaoId }) |
#Html.ActionLink("Details", "Details", new { id=item.SimulacaoId }) |
#Html.ActionLink("Delete", "Delete", new { id=item.SimulacaoId })
</td>
</tr>
}
</table>
}

Categories