نمایش نتایج 1 تا 3 از 3

نام تاپیک: داشتن چند مدل در یک ویو

  1. #1

    داشتن چند مدل در یک ویو

    سلام دوستان

    من دوتا اکشن دارم که میخام در یک ویو نمایش بدم.اما در هر ویو فقط میتونم یه مدل داشته باشم.وقتی هم میام از 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 اون غذا ذر یه تیبل دیگه حداگونه ذهیره بشه

    ممنونم

  2. #2

    نقل قول: داشتن چند مدل در یک ویو

    سوالتون رو درست متوجه نشدم .

    من دوتا اکشن دارم که میخام در یک ویو نمایش بدم.
    اگر میخواید ویو 2 اکشن رو داخل 1 ویو داشته باشید ، میتونید خروجی اکشن اول رو داخل یک PartialView برگردونید و بالای اکشن ChildActionOnly رو بصورت Attribute قرار بدید و در ویو اصلی از Html.Action استفاده کنید و اون اکشن رو در ویو رندر کنید.

    آیا راهی هست که در یک ویو بتونم چندتا مدل داشته باشم؟
    شما هر تعداد مدل که بخواید میتونید داخل 1 ویو داشته باشید با استفاده از ViewModel :

    public class AddFoodViewModel
    {
    public List<SelectListItem> List { get; set; }

    public Foods.Models.DomainModels.Food Food { get; set; }

    public ICollection<Foods.Models.DomainModels.Food> Foods { get;set; }

    ...
    }

    اما دقت کنید اگر در اکشن از ViewModel بعنوان Model استفاده میکنید ، در اکشنی که فرم Submit میشه هم باید همون ViewModel رو بعنوان ورودی دریافت کنید :

    [HttpPost]
    public ActionResult AddFood(AddFoodViewModel model)
    {
    //...
    }


    اگر هم میخواید تعدادی فیلد Dynamic رو از ویو بگیرید در ورودی میتونید از params[] استفاده کنید.
    View :

    @{
    // start:Form
    for(int i=0; i <= 10; i++;)
    {
    <input type="text" name="dynamicField" value="@i">
    }

    <input type="submit" name="Submit">
    // End:Form
    }


    Controller :

    public ActionResult AddFood(params string[] dynamicField)
    {
    foreach(var item in dynamicField)
    {
    // ...
    }
    }


    اگر منظورتون رو من اشتباه فهمیدم ، سوالتون رو واضح تر بپرسید .

  3. #3

    نقل قول: داشتن چند مدل در یک ویو

    ببینید در کل من میخام یه ویو درست کنم که در اون یه سری چک باکس دارم و چندتا input و image که با دکمه submit میخام اطلاعات وارد شده در inputها و image در جدولی بنام food ذخیره بشه. و چک باکسهایی که تیک خوردن هم id شون گرفته بشه و با idfood در یه جدول دیگه نگهداری بشه.درواقع مواد لازم برای تهیه غذا هست که در اون جدول نگهداری میشه.هر کدوم از این دو جدول رو بصورت جدا میتونم پیاده سازی کنم اما وقتی قراره تو یه ویو و یه submit باشن نمیدونم باید چطور کدنویسش کنم.

    ممنون

تاپیک های مشابه

  1. مبتدی: دو مدل در یک ویو در razor
    نوشته شده توسط maXXis در بخش ASP.NET MVC
    پاسخ: 1
    آخرین پست: چهارشنبه 22 مهر 1394, 08:02 صبح
  2. سوال: داشتن چند اسلایدر در یک صفحه
    نوشته شده توسط mah1365 در بخش طراحی وب (Web Design)
    پاسخ: 6
    آخرین پست: پنج شنبه 14 اسفند 1393, 09:58 صبح
  3. سوال: ترکیب دو مدل در یک ویو مدل و مرتب شدن بر اساس تاریخ
    نوشته شده توسط sepehr.aliakbary در بخش ASP.NET MVC
    پاسخ: 2
    آخرین پست: دوشنبه 21 مهر 1393, 20:25 عصر
  4. پاسخ: 0
    آخرین پست: پنج شنبه 11 مهر 1392, 20:36 عصر
  5. سوال: داشتن چند تايمر در يک فرم
    نوشته شده توسط potentate در بخش برنامه نویسی در 6 VB
    پاسخ: 5
    آخرین پست: یک شنبه 23 فروردین 1388, 20:17 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •