У меня есть класс POCO с этим определениемМодели Связывание в MVC основного выпуска
public class IndOff
{
public int Id { get; set; }
[Display(Name = "Member Name")]
[Required]
public int MemberID { get; set; }
public OfferingType OfferingType { get; set; }
[Display(Name = "Offering Type")]
[Required]
public int OfferingTypeID { get; set; }
public Currency Currency { get; set; }
[Display(Name = "Currency")]
[Required]
public int CurrencyID { get; set; }
public Member Member { get; set; }
public double Amount { get; set; }
public DateTime Date { get; set; }
}
Тогда я определил вид модель в этом классе, как
public class IndOffViewModel
{
public IndOffViewModel()
{
}
public IEnumerable<Currency> Currencies { get; set; }
public IEnumerable<OfferingType> OfferingTypes { get; set; }
public Member Member { get; set; }
public IndOff IndOff { get; set; }
}
Из моего контроллера, вид для сбора данных отображается правильно, проблема возникает, когда я отправляю данные. Мой пост действие
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Save(IndOff model, int memberId)
{
model.Date = DateTime.Today;
if (!ModelState.IsValid)
{
var member = _context.Members.Single(m => m.Id == memberId);
var viewModel = new IndOffViewModel
{
Member = member,
Currencies = _context.Currencies.ToList(),
OfferingTypes = _context.OfferingTypes.ToList()
};
return View("IndForm", viewModel);
}
if (model.Id == 0)
_context.IndOffs.Add(model);
else
{
var dbIndOff = _context.IndOffs.Single(c => c.Id == model.Id);
dbIndOff.Amount = model.Amount;
dbIndOff.CurrencyID = model.CurrencyID;
dbIndOff.OfferingTypeID = model.OfferingTypeID;
//dbIndOff.WorshipCenterID = weekOff.WorshipCenterID;
}
_context.SaveChanges();
return RedirectToAction("New", new { id = model.Id});
}
Однако IndOff модель объекта передается всегда пустой нулями для свойств. Хотя, когда я использую инспектор хрома, я вижу, что значения были переданы контроллеру. В чем проблема или что я делаю неправильно? Вот как выглядит страница вида
@model ViewModels.IndOffViewModel
@{
ViewBag.Title = "Offering";
}
<form asp-action="Save" method="post">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="IndOff.OfferingTypeID" class="control-label"></label>
<select asp-for="IndOff.OfferingTypeID" asp-items="@(new SelectList(Model.OfferingTypes,"ID","Name"))" class="form-control">
<option value="">-Select-</option>
</select>
<span asp-validation-for="IndOff.OfferingTypeID" class="text-danger" />
</div>
<div class="form-group">
<label asp-for="IndOff.CurrencyID" class="control-label"></label>
<select asp-for="IndOff.CurrencyID" asp-items="@(new SelectList(Model.Currencies,"Id","Name"))" class="form-control">
<option value="">-Select-</option>
</select>
<span asp-validation-for="IndOff.CurrencyID" class="text-danger" />
</div>
<div class="form-group">
<label asp-for="IndOff.Amount" class="control-label"></label>
<input asp-for="IndOff.Amount" class="form-control" />
<span asp-validation-for="IndOff.Amount" class="text-danger" />
</div>
@*<div class="checkbox">
<label>
<input asp-for="Member.Baptised" />
Baptised ?
</label>
</div>*@
<input type="hidden" asp-for="IndOff.Id" />
<input type="hidden" asp-for="Member.Id" name="memberId" />
<input type="submit" value="Submit" class="btn btn-primary" />
</form>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
я думаю, что проблема в том, что MemberId не является частью модели – user230910
Пожалуйста, обратите внимание, что тег модель-представление-контроллер для вопросов о шаблоне. Существует определенный тег для реализации ASP.NET-MVC. –
Вам нужно показать свое мнение! –