Home > Mobile >  Multiple Table in Single View Page Asp.net 4
Multiple Table in Single View Page Asp.net 4

Time:09-18

I am trying to display two 2 tables in one View. I don't want to display it as a list but to detail, and most tutorials I get a lists view.

I tried the following video: https://youtu.be/oN1f2Vpc-wU

Another link: https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application

Now the issue I have is that when I click the link to open a details page for ViewModel, it shows null.

Model 1

[Table("UserRegistration")]
public partial class UserRegistration
{
    [Key]
    public Guid ClientId { get; set; }

    [StringLength(50)]
    public string FirstName { get; set; }

    [StringLength(50)]
    public string LastName { get; set; }

    [StringLength(50)]
    public string IdentityNumber { get; set; }

    [StringLength(50)]
    public string PhoneNumber { get; set; }

    public string Password { get; set; }

    public string ConfirmPassword { get; set; }

    [Column(TypeName = "date")]
    public DateTime? DateCreated { get; set; }
}

Model 2

[Table("Voucher")]
public partial class Voucher
{
    public int VoucherId { get; set; }

    public Guid? CustomerId { get; set; }

    [StringLength(50)]
    public string HouseNumber { get; set; }

    [StringLength(50)]
    public string PostalCode { get; set; }

    [StringLength(50)]
    public string Location { get; set; }

    [Column(TypeName = "date")]
    public DateTime? DateCreated { get; set; }
}

ViewModel

 public class ViewModel
{

    public Guid? CustomerId { get; set; }

    public string FirstName { get; set; }


    public string LastName { get; set; }


    public string IdentityNumber { get; set; }


    public string HouseNumber { get; set; }


    public string PostalCode { get; set; }


    public string Location { get; set; }
} 

Controller UserRegistration

  private mymodel db = new mymodel();

    // GET: UserRegistrations
    public ActionResult Index()
    {
        return View(db.UserRegistrations.ToList());
    }

Controller Home

    private mymodel db = new mymodel();
    // GET: Home
    public ActionResult Index(Guid id)
    {
        //
        UserRegistration ur = db.UserRegistrations.Single(x => x.ClientId == id);
        Voucher voucher = new Voucher();

        ViewModel viewm = new ViewModel();

        ur.FirstName = viewm.FirstName;
        ur.LastName = viewm.LastName;

        voucher.HouseNumber = viewm.HouseNumber;
        voucher.Location = viewm.Location;
        voucher.PostalCode = viewm.PostalCode;


        return View(viewm);
    }

Index.cshtml

          @model ExampleTestMVC.Models.ViewModel
    @{
        ViewBag.Title = "Index";
     }

     <h2>Index</h2>


     <div>
     <h4>UserRegistration</h4>
     <hr />
     <dl class="dl-horizontal">
     <dt>
       @Html.DisplayNameFor(model => model.FirstName)
      </dt>

      <dd>
        @Html.DisplayFor(model => model.FirstName)
      </dd>

      <dt>
        @Html.DisplayNameFor(model => model.LastName)
    </dt>

    <dd>
        @Html.DisplayFor(model => model.LastName)
    </dd>


    <dt>
        @Html.DisplayNameFor(model => model.HouseNumber)
    </dt>

    <dd>
        @Html.DisplayFor(model => model.Location)
    </dd>


    <dt>
        @Html.DisplayNameFor(model => model.PostalCode)
    </dt>

    <dd>
        @Html.DisplayFor(model => model.PostalCode)
    </dd>

</dl>

Index.chtml for UserRegistration

   @model IEnumerable<ExampleTestMVC.Models.UserRegistration>

   @{
    ViewBag.Title = "Index";
    }

   <h2>Index</h2>

   <p>
    @Html.ActionLink("Create New", "Create")
   </p>
   <table class="table">
   <tr>
    <th>
        @Html.DisplayNameFor(model => model.FirstName)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.LastName)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.IdentityNumber)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.PhoneNumber)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.Password)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.ConfirmPassword)
    </th>
    <th>
        @Html.DisplayNameFor(model => model.DateCreated)
    </th>
    <th></th>
</tr>

  @foreach (var item in Model) {
    <tr>
    <td>
        @Html.DisplayFor(modelItem => item.FirstName)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.LastName)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.IdentityNumber)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.PhoneNumber)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Password)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.ConfirmPassword)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.DateCreated)
    </td>
    <td>
        @Html.ActionLink("details of everything", "Index", "Home", new { id = item.ClientId }, null) |     
       </td>
       </tr>
       }

      </table>

CodePudding user response:

You are not setting value to viewmodel which is bind with detail view. Change the Home controller code like this :

public ActionResult Index(Guid id)
{
    //
    UserRegistration ur = db.UserRegistrations.Single(x => x.ClientId == id);
    Voucher voucher = db.Vouchers.Single(x => x.CustomerId == id);

    ViewModel viewm = new ViewModel();

    viewm.FirstName=ur.FirstName;
    viewm.LastName=ur.LastName;

    viewm.HouseNumber=voucher.HouseNumber;
    viewm.Location=voucher.Location;
    viewm.PostalCode=voucher.PostalCode;


    return View(viewm);
}
  • Related