niki
niki

Reputation: 9

can i send viewmodel and IEnumerable to a view together

can i have view(in data base : right click on table ----> View ) and a model into view page together?

i have some fileds on page that wanna send their content to one action result(so i should pass a model to my view , yes?) and then the reuslt of action result is view in data base.in fact i have some tds on view pages that wanna fill them by QuerySelect(View In data base).

i did like below . if i click first button i'll get my model null (in [HttpPost]) . and if click first button my model is null too .

view :

       @model Project.Models.MyClass.WholeList


       @using (Html.BeginForm("listPlayer", "Player", FormMethod.Post))
                        {
                            @Html.AntiForgeryToken()
          @Html.TextBoxFor(m => m. PSearch.name, new { @placeholder = "* Enter name" })
           <input type="submit" value="search via name" name="Search" class="btn btn-general" />

                         }

     @model IEnumerable<Project.Models.vw_Players >

    @foreach (var item in Model)
    {
        <tr>

            <td class="stock">
                @Html.DisplayFor(modelItem => item.nam)
            </td>
            <td class="stock">
                @Html.DisplayFor(modelItem => item.cost)
            </td>
            <td class="stock">@item.number</td>
            <td class="stock">
                @Html.DisplayFor(modelItem => item.coach)
            </td>
        </tr>
    }

               @using (Html.BeginForm("listPlayer", "Player", FormMethod.Post))
                        {


                                  <select name="daystart">
                                    @for (var day = 1; day <= 31; day++)
                                    {
                                        <option value="@day">@day</option>
                                    }

                                </select>
                            <select name="monthstart">
                                <option value="01">1</option>
                                <option value="02">2</option>
                                <option value="03">3</option>
                                <option value="04">4</option>
                                <option value="05">5</option>
                                <option value="06">6</option>
                                <option value="07">7</option>
                                <option value="08">8</option>
                                <option value="09">9</option>
                                <option value="10">10</option>
                                <option value="11">11</option>
                                <option value="12">12</option>

                            </select>
                            <select name="yearstart" >
                                @for (var year = 2013; year <= Myfuc(DateTime.Now); year++)
                                {
                                    <option value="@year">@year</option>
                                }

                            </select>
               <input type="submit" value="seaech" class="btn btn-general" />
                                  }

MyClass.cs:

       public class Search
       {
    [Required(ErrorMessage = "required")]
    public string name { get; set; }
    public int daystart { get; set; }
    public int monthstart { get; set; }
    public int yearstart { get; set; }
    }

    public class WholeList
    {

        public List<Project.Models.vw_ Players > Player { get; set; }
        public Search  PSearch { get; set; }
    }

Controller :

       [httpGet]
        public ActionResult ListPlayer()
             {

            var db = new ProjectContext();
        var objWhol = new MyClass.WholeList ();
        objWhol.Player = db.vw_Players.ToList();
        return View(objWhol);
        }


    [HttpPost]
    public ActionResult ListPlayer ( MyClass.WholeList model)
    {
        if (ModelState.IsValid )
        {
            var myvarible = MyClass.Coachlistpalayer();
             model.Player = myvarible.Where(p => p.nam.ToUpper()).ToList();
            else
            { }
            return View(model);
        }


    }

Upvotes: 1

Views: 318

Answers (1)

Andrey Gubal
Andrey Gubal

Reputation: 3479

You need general ViewModel to iplement this. Something like that

public class myViewModel
{
  public List<Project.Models.vw_Players> players {get; set;}
  public MyviewModel Mymodel {get; set;}
}

In View:

@model Project.Models.myViewModel

@foreach (var item in Model.players)
{
//** do somthing
}


@Model.Mymodel.day //** or something else

EDITED.

You also need change your public ActionResult ListPlayer() to return myViewModel. Something like that:

public ActionResult ListPlayer()
{
  MyviewModel model = new MyviewModel
{
//** define properties here
}
 List<vw_Players> players_ = db.vw_Players.ToList();

var result = new myViewModel
{
players = players_,
Mymodel = model
}

return View(result);

}

Upvotes: 2

Related Questions