У меня есть одна модель и два ViewModelsИспользование ViewModel размещать в модели
Модель:
public class WebPages
{
[Key]
public int WebPagesId { get; set; }
public String DomainName { get; set; }
public DateTime DomainStart { get; set; }
public DateTime DomainExp { get; set; }
}
ViewModel:
public class WebPagesViewModel
{
public String DomainName { get; set; }
public DateTime DomainStart { get; set; }
public List<SelectListItem> DurationDays { set; get; }
public int SelectedDurationDays { set; get; }
}
Так контроллер для них:
//Get controller
public ActionResult Create(WebPages model)
{
var vm = new WebPagesViewModel
{
DurationDays = new List<SelectListItem>()
{
new SelectListItem {Value = "1", Text = "1 año"},
new SelectListItem {Value = "2", Text = "2 años"}
}};
retrun View(vm);
}
//Post controller
public async Task<ActionResult> Create(WebPagesViewModel model)
{
var endDate = DateTime.Now.AddYears(model.SelectedDurationDays);
var webnew = new WebPages
{
DomainName = model.DomainName,
DomainStart = model.DomainStart,
DomainExp = endDate
};
db.WebPagesList.Add(webnew);
db.SaveChanges();
return View(model);
ЭТО РАБОТАЕТ ОК, Я НЕ ЛЮБЛЮ ПРОБЛЕМ MS, ЧТО Я ХОЧУ ДЕЛАТЬ, ДОБАВЛЯЕТ НОВЫЕ ДНИ К существующей DomainExp
конкретной DomainName
моей базе данных.
Я пытаюсь сделать это, создавая еще один ViewModel и создать вид, как эти:
public class RenewalViewModel
{
public int SelectedDurationDays { set; get; }
public List<SelectListItem> AddTime { get; set; }
public int SelectedWebPage { get; set; }
public IEnumerable<SelectListItem> Webpage { get; set; }
}
}
Контроллеры:
[HttpGet]
public async Task<ActionResult> Renewal()
{
var vm = new RenewalViewModel
{
AddTime = new List<SelectListItem>
{
new SelectListItem {Value = "1", Text = "1 año"},
new SelectListItem {Value = "2", Text = "2 años"},
new SelectListItem {Value = "3", Text = "3 años"},
new SelectListItem {Value = "4", Text = "4 años"},
new SelectListItem {Value = "5", Text = "5 años"},
new SelectListItem {Value = "6", Text = "6 años"},
new SelectListItem {Value = "7", Text = "7 años"},
new SelectListItem {Value = "8", Text = "8 años"},
new SelectListItem {Value = "9", Text = "9 años"}
},
Webpage = new SelectList(db.WebPagesList,"WebPagesId", "DomainName")
};
return View(vm);
}
[HttpPost]
public async Task<ActionResult> Renewal(RenewalViewModel vm)
{
var addDays = DateTime.Now.AddYears(vm.SelectedDurationDays);
var webpage = new WebPages
{
DomainExp = addDays
};
db.Entry(webpage).State = EntityState.Modified;
return View(webpage);
}
Но в return View(webpage);
у меня этот вопрос
ххх модели .Webpages не присваивается типу модели xxx.Models.ViewModel.RenewalViewModel
Я знаю, что это потому, что я назвал, на мой взгляд RenewalViewmodel, а не веб-страниц, я хочу знать, что мой неверный шаг, чтобы сделать это, я хочу
Модель в представлении '@model RenewalViewModel', поэтому вам нужно вернуть' RenewalViewModel', а не модель WebPages', то есть 'return View (vm);' –
, но в этом случае, как я могу сравнить 'Дом ainExp = addDays', если 'DomainExp' находится в' WebPages' модели – Eduard
Извините, я не понимаю ваш комментарий - нет, где в методах 'Renewal' или связанной модели представления есть какая-либо ссылка на любые существующие' WebPages' - все, что вы это создание и сохранение новых «веб-страниц». –