asp.net - View bound to ViewModel does not contain a definition for some objects -
i have view bound viewmodel containing products , contacts. display products in 1 part of view , works. need expose data definition contacts can take input , post contacts model.
it fails first @ line @html.labelfor(model => model.contactfname)
error message:
'productpageviewmodel' not contain definition 'contactfname'
productpageviewmodel.cs
public class productpageviewmodel { public ienumerable<products> products { get; set; } public ienumerable<contact> contacts { get; set; } public string vmmessage { get; set; } } products controller , index action
public actionresult index(string product) { if (string.isnullorempty(product)) { product = "homepage"; } var products = db.dbproducts.where(m => m.category == product); var contacts = db.dbcontacts; var model = new viewmodel.productpageviewmodel { contacts = contacts, products = products, }; return view(model); } products model
public class products { [key] public int wpid { get; set; } public string category { get; set; } public int categoryid { get; set; } public string proddescshort { get; set; } public string proddesclong { get; set; } public string productsmall { get; set; } public string productmedium { get; set; } public string productlarge { get; set; } public decimal? price1 { get; set; } } contacts model
public class contact { public int? contactid { get; set; } public string contactfname { get; set; } public string contactlname { get; set; } public string contactemail { get; set; } public string contactcomments { get; set; } public string contactbirthday { get; set; } public string contactsource { get; set; } } index view
@model janiesweblive.viewmodel.productpageviewmodel @using (html.beginform("additem", "carts")) { foreach (var item in model.products) { <p><img class="product-image" src=@html.displayfor(modelitem => item.productmedium) /></p> <h3>@html.displayfor(modelitem => item.wpproductid)</h3> <h5>@html.displayfor(modelitem => item.price1)</h5> <h6>@html.displayfor(modelitem => item.proddescshort)</h6> <p class="text-center">@html.displayfor(modelitem => item.proddesclong)</p> <p> <button class="text-right btn btn-link js-delete">add cart</button> </p> } } @using (html.beginform("submitcontact", "products")) { <div class="form-group"> @html.labelfor(model => model.contactfname) @html.textboxfor(model => model.contactfname, new { @class = "form-control" }) </div> <div class="form-group"> @html.labelfor(model => model.contactlname) @html.textboxfor(model => model.contactlname, new { @class = "form-control" }) </div> <div class="form-group"> @html.labelfor(model => model.contactemail) @html.textboxfor(model => model.contactemail, new { @class = "form-control" }) </div> <div class="form-group"> @html.labelfor(model => model.contactcomments) @html.textareafor(model => model.contactcomments, new { @class = "form-control", rows = 3 }) </div> @html.hidden("contactsource", "dealssignup") <button type="submit" class="btn btn-primary">submit</button> }
in products controller , index action try: var contacts = db.dbcontacts**.tolist();**
or in viewmodel initialisation can put already:
contacts = db.dbcontacts**.tolist();**
you passing concrete product set of contacts.
var products = db.dbproducts.where(m => m.category == product); var model = new viewmodel.productpageviewmodel { contacts = db.dbcontacts.tolist(), products = products }; return view(model); }
Comments
Post a Comment