2017-01-06 4 views
1

リストプロパティを持つモデルをデータで埋めようとしていますが、コントローラーで定義したリストデータを渡しても問題ありません私の見解に。Asp.net MVCモデルはリストプロパティを表示するためにバインドしません

私はこのようになりましたのviewmodel:それにいくつかの基本データを追加し、コントローラ

public class FilmsViewModel 
{ 
    public Films film { get; set; } 
    public List<FilmExhibitions> exhibitions { get; set; } 

    public FilmsViewModel() 
    { 
     film = new Films(); 
     exhibitions = new List<FilmExhibitions>(); 
    }  
} 

を:

public class AdminController : Controller 
{ 
    private IItemsRepository repository = new DbItemsRepository(); 

    // GET: Admin 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult AddItem() 
    { 
     return View(); 
    } 


    public ActionResult _AddFilm() 
    { 
     FilmsViewModel filmsViewModel = new FilmsViewModel(); 
     filmsViewModel.exhibitions.Add(new FilmExhibitions()); 
     filmsViewModel.exhibitions.Add(new FilmExhibitions()); 
     filmsViewModel.exhibitions[0].startTime = new DateTime(2017, 1, 1, 0, 0, 0); 
     filmsViewModel.exhibitions[0].endTime = new DateTime(2017, 1, 1, 0, 0, 0); 
     filmsViewModel.exhibitions[1].startTime = new DateTime(0001, 1, 1, 0, 0, 0); 
     filmsViewModel.exhibitions[1].endTime = new DateTime(0001, 1, 1, 0, 0, 0); 

     return PartialView(new FilmsViewModel()); 
    } 

    [HttpPost] 
    public ActionResult _AddFilm(FilmsViewModel filmViewModel) 
    { 
     repository.AddItem(filmViewModel.film); 

     Items item = repository.GetItemByName(filmViewModel.film.name); 


     return View(); 
    } 

そして最後にちょうど受け入れることを望んでいない私の見解をこのデータ:

@using Project_IHFF.Models 
@model FilmsViewModel 

@Html.ValidationSummary() 
@using (Html.BeginForm("_AddFilm")) 
{ 
    <label>Name: </label> 
    @Html.TextBoxFor(x => x.film.name, new { @class = "form-control"}) 
    <br /> 
    <label>Description:</label> 
    @Html.TextBoxFor(x => x.film.description, new { @class = "form-control" }) 
    <br /> 
    <label>Location: </label> 
    @Html.TextBoxFor(x => x.film.location, new { @class = "form-control" }) 
    <br /> 
    <label>Price: </label> 
    @Html.TextBoxFor(x => x.film.price, new { @class = "form-control" }) 
    <br /> 
    <label>Directors:</label> 
    @Html.TextBoxFor(x => x.film.director, new { @class = "form-control" }) 
    <br /> 
    <label>Actors: </label> 
    @Html.TextBoxFor(x => x.film.actors, new { @class = "form-control" }) 
    <br /> 
    <label>Capacity: </label> 
    @Html.TextBoxFor(x => x.film.capacity, new { @class = "form-control" }) 
    <br /> 
    <br /> 
    for (var i = 0; i < Model.exhibitions.Count(); i++) 
    { 
     @Html.HiddenFor(x => x.exhibitions[i].startTime); 
     @Html.HiddenFor(x => x.exhibitions[i].endTime); 
     @Html.HiddenFor(x => x.exhibitions[i].id); 
    } 

    <label>First Exhibition</label><br /> 
    <label>Starting Time:</label> 
    @Html.TextBoxFor(x => x.exhibitions[0].startTime, new { @class = "form-control" }) 

    <br /> 
    <label>Ending Time:</label> 
    @Html.TextBoxFor(x => x.exhibitions[0].endTime, new { @class = "form-control" }) 
    <br /> 
    <br /> 
    <div id="HiddenDiv"> 
     <label>Second Exhibition (Optional)</label> 
     <br /> 
     <label>Starting Time:</label> 
     @Html.TextBoxFor(x => x.exhibitions[1].startTime, new { @class = "form-control", id = "HiddenTextBox" }) 
     <br /> 
     <label>Ending Time:</label> 
     @Html.TextBoxFor(x => x.exhibitions[1].endTime, new { @class = "form-control", id = "HiddenTextBox" }) 
     <br /> 
    </div> 


    <input type="button" id="VisibilityButton" name="show" value="+ Add second exhibition" onclick="showDiv()" class="btn btn-primary" /> 

    <script> 
     function showDiv() { 
      document.getElementById('HiddenDiv').style.display = "block"; 
      document.getElementById('VisibilityButton').value = "- Remove second exhibition"; 
      document.getElementById('VisibilityButton').onclick = function() { hideDiv() }; 
     } 

     function hideDiv() { 
      document.getElementById('HiddenDiv').style.display = "none"; 
      document.getElementById('VisibilityButton').value = "+ Add second exhibition"; 
      document.getElementById('VisibilityButton').onclick = function() { showDiv() }; 
     } 
    </script> 

    <input type="submit" value="Submit" class="btn btn-primary" /> 

誰も私がここで間違っているアイデアはありますか?私はこの時点で完全に迷っています。

+1

ようになっているはずと信じては'あなた '_AddFilm'コントローラのアクションから、あなたの代わりに' 'PartialView(filmsViewModel)を返す必要があります。 –

+0

うわー、私はそれを逃したとは思わない。どうもありがとう! –

+0

ypuがAddFilmアクションに値を入力すると予想される場合、 'return PartialView(filmsViewModel)' – Developer

答えて

2

_AddFilmコントローラでは、以前に作成したFilesViewModelの代わりにPartialView(new FilmsViewModel());を返します。

私はあなたのコードは、あなたが `PartialView(新しいFilmsViewModelを())戻っている。この

public ActionResult _AddFilm() 
{ 
    FilmsViewModel filmsViewModel = new FilmsViewModel(); 
    filmsViewModel.exhibitions.Add(new FilmExhibitions()); 
    filmsViewModel.exhibitions.Add(new FilmExhibitions()); 
    filmsViewModel.exhibitions[0].startTime = new DateTime(2017, 1, 1, 0, 0, 0); 
    filmsViewModel.exhibitions[0].endTime = new DateTime(2017, 1, 1, 0, 0, 0); 
    filmsViewModel.exhibitions[1].startTime = new DateTime(0001, 1, 1, 0, 0, 0); 
    filmsViewModel.exhibitions[1].endTime = new DateTime(0001, 1, 1, 0, 0, 0); 

    return PartialView(filmsViewModel); 
} 
関連する問題