问题描述:

I am trying to display a complex viewmodel in a view, everything works fine except one dropdownlist. I am displaying a list of enum, and set the selected object as it should be. But for an unknown reason, its not showing the selected value. I have tried many times with but failed -- please help me. The code is given below -

Enum:

public enum CommentStatus

{

NoStatus = 0,

Resolved = 1,

NotApplicable = 2

}

Model:

public class CheckComments

{

public string EntryId { get; set; }

public int Serial { get; set; }

public string Comment { get; set; }

public DateTime CommentDate { get; set; }

public CommentStatus CommentStatus { get; set; }

}

public class CheckDataViewModel

{

public string EntryId { get; set; }

public string CheckId { get; set; }

public decimal Value { get; set; }

public List<CheckComments> CheckCommentsList { get; set; }

public List<string> CommentStatusList { get; set; }

}

Controller:

public class CheckDataController : Controller

{

public ActionResult GetEnteredCheckData(string entryId)

{

var checkDataViewModel = new CheckDataViewModel();

var checkData = new CheckDataManager().GetCheckData(entryId);

checkDataViewModel.EntryId = checkData.EntryId;

checkDataViewModel.CheckId = checkData.CheckId;

checkDataViewModel.Value = checkData.Value;

checkDataViewModel.CheckCommentsList = checkData.Comments;

checkDataViewModel.CommentStatusList = Enum.GetNames(typeof (CommentStatus)).ToList();

return View("EnteredCheckData", checkDataViewModel);

}

}

View:

@model PDCA.Web.Models.CheckDataViewModel

@{

ViewBag.Title = "EnteredCheckData";

Layout = "~/Views/Shared/_Layout.cshtml";

}

@using (Html.BeginForm())

{

@Html.ValidationSummary(true)

<fieldset>

<div class="row">

<div class="span3">

<div class="text-left">@Html.LabelFor(model => model.EntryId)</div>

</div>

<div class="span3">

<div class="text-left">

@Html.DisplayFor(model => model.EntryId)

@Html.HiddenFor(model => model.EntryId)

</div>

</div>

</div>

</fieldset>

<fieldset>

<legend>Check Information</legend>

<div class="row">

<div class="span3">

<div class="text-left">@Html.LabelFor(model => model.CheckId)</div>

</div>

<div class="span3">

<div class="text-left">

@Html.DisplayFor(model => model.Check.CheckId)

@Html.HiddenFor(model => model.Check.CheckId)

</div>

</div>

</div>

</fieldset>

<fieldset>

<legend>Comments</legend>

<div>

<table class="table table-bordered">

<tr>

<th>

Serial

</th>

<th>

Comment

</th>

<th>

Date

</th>

<th>

Status

</th>

<th>

</th>

</tr>

@for (int i = 0; i < Model.CheckCommentsList.Count; i++)

{

<tr>

<td>

@Html.DisplayFor(modelItem => Model.CheckCommentsList[i].Serial)

@Html.HiddenFor(modelItem => Model.CheckCommentsList[i].Serial)

</td>

<td>

@Html.DisplayFor(modelItem => Model.CheckCommentsList[i].Comment)

@Html.HiddenFor(modelItem => Model.CheckCommentsList[i].Comment)

</td>

<td>

@Html.DisplayFor(modelItem => Model.CheckCommentsList[i].CommentDate)

@Html.HiddenFor(modelItem => Model.CheckCommentsList[i].CommentDate)

</td>

<td>

@Html.DropDownListFor(modelItem => Model.CheckCommentsList[i].CommentStatus, new SelectList(Model.CommentStatusList, Model.CheckCommentsList[i].CommentStatus))

@Html.ValidationMessageFor(model => Model.CheckCommentsList[i].CommentStatus)

</td>

<td>

@Html.ActionLink("Update Status", "UpdateCommentStatus", new { Model.EntryId, Model.CheckCommentsList[i].Serial, Model.Check.CheckTitle, Model.Check.CheckId })|

@Html.ActionLink("Delete", "DeleteComment", new { Model.CheckCommentsList[i].Serial, Model.EntryId })

</td>

</tr>

}

</table>

</div>

</fieldset>

}

<div>

@Html.ActionLink("Back to List", "Index")

</div>

The code is too lengthy but I think this will help you to understand my mistakes. Thanks in advance friends.

网友答案:

Solution:

@Html.DropDownListFor(modelItem => Model.CheckCommentsList[i].CommentStatus, new SelectList(Model.CommentStatusList, Model.CheckCommentsList[i].CommentStatus.ToString()))

相关阅读:
Top