سلام دوستان
من دوتا اکشن دارم که میخام در یک ویو نمایش بدم.اما در هر ویو فقط میتونم یه مدل داشته باشم.وقتی هم میام از viewdatamodel استفاده میکنم چون یکی از اکشنهام نوع لیست رو میگیره با کلی اشکال مواجه میشم.آیا راهی هست که در یک ویو بتونم چندتا مدل داشته باشم؟
اینم از کدهای منه که در حال حاضر کلی ارور داره:
کدهای کنترلر:
public ActionResult AddFood()
{
List<SelectListItem> items = new List<SelectListItem>();
var list = db.GetStuff();
foreach (var item in list)
{
items.Add(new SelectListItem
{
Text = item.Name.ToString(),
Value = item.Id.ToString()
});
}
return View(items);
}
[HttpPost]
public ActionResult AddFood(List<SelectListItem> items)
{
ViewBag.Message = "Selected Items:\\n";
foreach (SelectListItem item in items)
{
if (item.Selected)
{
ViewBag.Message += string.Format("{0}\\n", item.Text);
}
}
return View(items);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateFood(Food food)
{
if (ModelState.IsValid)
{
db.Foods.Add(food);
db.SaveChanges();
}
ViewBag.IdUser = new SelectList(db.Users, "Id", "Username", food.IdUser);
return View(food);
}
کدهای ویو:
@model Food.ViewModels.Admin.AddFoodViewModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
<style type="text/css">
body {
font-family: Arial;
font-size: 10pt;
}
</style>
</head>
<body>
<table>
<tr>
<td>
@using (Html.BeginForm("AddFood", "Admin", FormMethod.Post))
{
<table>
@for (int i = 0; i < Model.List.Count(); i++)
{
<tr>
<td>
@Html.CheckBoxFor(m => m.List[i].Selected)
</td>
<td>
@Html.DisplayFor(m => m.List[i].Text)
@Html.HiddenFor(m => m.List[i].Value)
@Html.HiddenFor(m => m.List[i].Text)
</td>
</tr>
}
</table>
<br />
<input type="submit" value="Submit" />
}
@if (ViewBag.Message != null)
{
<script type="text/javascript">
window.onload = function () {
alert("@ViewBag.Message");
};
</script>
}
}
</td>
<td>
@using (Html.BeginForm("CreateFood", "Admin", FormMethod.Post))
{
<h2>Create</h2>
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Food</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.FullText)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.FullText)
@Html.ValidationMessageFor(model => model.FullText)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Image)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Image)
@Html.ValidationMessageFor(model => model.Image)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.IdUser, "User")
</div>
<div class="editor-field">
@Html.DropDownList("IdUser", String.Empty)
@Html.ValidationMessageFor(model => model.IdUser)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Visit)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Visit)
@Html.ValidationMessageFor(model => model.Visit)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Likes)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Likes)
@Html.ValidationMessageFor(model => model.Likes)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Dislike)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Dislike)
@Html.ValidationMessageFor(model => model.Dislike)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Dates)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Dates)
@Html.ValidationMessageFor(model => model.Dates)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Type)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Type)
@Html.ValidationMessageFor(model => model.Type)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<div>
@Html.ActionLink("Back to List", "Index")
</div>
}
</td>
</tr>
</table>
</body>
</html>
اینم دیتا مدلم:
public class AddFoodViewModel
{
public List<SelectListItem> List { get; set; }
public Foods.Models.DomainModels.Food Food { get; set; }
}
در کل هم هدفم اینه که یه لیست از مواد غذایی بصورت چک باکس داشته باشم از تیبل stuff و هر ماده غذایی رو که لازم دارم تیک بزنم.بعد چندتا فیلد داشته باشم تا اطلاعات اون غذا مثه عکسش و طرز تهیع و غیره رو توش بنویسم.بعدم که ذخیره میکنم اطلاعات غذاییم در تیبل food ذهیره بشه. ومواد غذایی هم با id اون غذا ذر یه تیبل دیگه حداگونه ذهیره بشه
ممنونم