Search code examples
c#asp.net-mvcasp.net-mvc-viewmodel

Read Data from table with no relationship


I have some global information (Company name, street, phone, …) stored in a table "CompInfo". This table has only one entry and has no relationship to other tables.

Now I need this information in a view to generate, i.e. offers. I tried to add this data in the controller, but I don't know how I can send this info to my view.

Here is my controller:

public async Task<IActionResult> Offer(int qry_offer)
{
    ViewData["Message"] = "Offer";


    var x412Context = _context.Offer
        .Where(m => m.Id == qry_offer);


    x412Context = x412Context
        .Include(o => o.Kunde)
        .Include(o => o.Mandant)
        .Include(m => m.OfferPos)
            .ThenInclude(m => m.Ust)
        ;
    return View(await x412Context.ToListAsync());
}

First I add the following code

var Comp_Info = _context.CompInfo
    .Where(m => m.Id == 1);

With breakpoints and debugging I see that Comp_Info has the information I require. But I don´t know how to get this info to my view.

I tried

ViewData["street"] = Comp_Info.street;

But this doesn't work.

Does anyone have an idea how I can transmit the data to the view?


Solution

  • You can return a viewmodel in your Offer method that looks like this :

    public class FooVM
    {
      public List<Offer> Offers {get; set;}
      public CompInfo CompInfo{get; set;}
    }
    

    and in your controller initilize the FooVm like this:

    var vm = new FooVM 
    {
      Offers = await x412Context.ToListAsync(),
      CompInfo =  Comp_Info 
    };
    

    and then in your Offer Method you return View(vm);

    then your Offer.cshtml will look something like :

    @model FooVm;
    // some html code 
    @foreach (var offer in Model.Offers)
    {
    // Do something
    }
    <span>@Model.CompInfo.Street</span>