Вариант № 1:
Вам просто нужно поставить {get;установлен;} в конце Country в вашей CountryViewModel.Это позволит вам установить значение countryId, но имя не будет установлено.Вам нужно будет отыскать это по сравнению с вашей базой данных, если вам это тоже нужно.
public class CountryViewModel
{
public IEnumerable<Country> CountryList { get; set; }
public Country Country { get; set; }
}
Option # 2
Это то, что я бы сделал.Переделайте вашу CountryViewModel, чтобы фактически представить модель вашего представления.
public class CountryViewModel
{
public int CountryID { get; set; }
public DateTime TimeForCheckedOut { get; set; }
}
Затем обновите ваш контроллер.
// Simulating a db
private List<Country> Countries;
public HomeController()
{
// Initializing sample data
Countries = new List<Country>();
Countries.Add(new Country() { countryId = 1, countryName = "USA" });
Countries.Add(new Country() { countryId = 2, countryName = "England" });
Countries.Add(new Country() { countryId = 3, countryName = "Japan" });
Countries.Add(new Country() { countryId = 4, countryName = "China" });
}
public ActionResult Index()
{
// I prefer using the ViewData Dictionary for my selectlists
ViewData["CountrySelectList"] = new SelectList(Countries, "countryId", "countryName");
return View();
}
[HttpPost]
public ActionResult Index(CountryViewModel cvModel)
{
var country = Countries.First(c => c.countryId == cvModel.CountryId);
// Do Stuff Like Saving and Updating
ViewData["CountrySelectList"] = new SelectList(Countries, "countryId", "countryName", cvModel.CountryId);
return View(cvModel);
}
И, наконец, обновите ваш View
@model PenaltyCalculation.Models.ViewModel.CountryViewModel
<form class="" style="margin-top:10%;" action="/" method="post">
<div class="form-group">
<label>Check out date of the Book</label>
<input class="form-control" type="date" name="timeForCheckedOut">
</div>
<div class="form-group">
<label>Choose a country</label>
@Html.DropDownListFor(m => m.CountryId, (SelectList)ViewBag.CountrySelectList, new { @class = "form-control" })
</div>
<button type="submit" class="btn btn-primary">Calculate</button>
</form>