Ну, у меня есть сложная модель вида формы, как это:
public class TransactionFormViewModel
{
public Session SessionRecord { get; private set; }
public IEnumerable<Resource> ResourcePerSessionRecord { get; private set; }
public Person PersonRecord { get; private set; }
public decimal SubTotal { get; private set; }
public TransactionFormViewModel(Person patient, Session session, IEnumerable<Resource> resourcePerSession)
{
this.PersonRecord = person;
this.SessionRecord = session;
this.ResourcePerSession = resourcePerSession
this.SubTotal = CalculateSubTotal();
}
private decimal CalculateSubTotal()
{
return ResourcePerSession.Sum(x => x.Cost);
}
}
Это моя модель, которую я использую в представлении, которое (представление) выглядит так:
<A table that shows Person data></table>
<A table that shows a review of the Session> </table>
<!-- the submit button i need to complete the transaction -->
<% using (Html.BeginForm("PayNow", "Session"))
{ %>
<div id="trans-ses-footer">
<%:Html.HiddenFor(x => x.SessionRecord.SessionID) %>
<%:Html.HiddenFor(x => x.SessionRecord.PersonID) %>
<%:Html.HiddenFor(x => x.SubTotal) %>
<input type="submit" value="Pay" />
</div>
<% } %>
</div>
Контроллер выглядит так:
[HttpPost]
public ActionResult PayNow ()
{
// модель транзакции
Транзакция транзакция = новая транзакция ();
transaction.SessionID = int.Parse(Request.Form["SessionRecord.SessionID"]);
transaction.PersonID = int.Parse(Request.Form["SessionRecord.PersonID"]);
transaction.TotalCost = decimal.Parse(Request.Form["SubTotal"]);
transaction.Paid = true;
_sessionRepository.SaveTransaction(transaction);
TempData["TransactionMessage"] = "The transaction was saved successfully.";
return View();
}
Я использую Request.Form для получения значений, необходимых для транзакции. Если я хочу сделать это так:
Public ActionResult(Transaction transaction)
{
if(ModelState.IsValid)
_transactionRepository.SaveTransaction(transaction)
etc...
}
Мне нужно создать заказную модель покупателя. Стоит ли это хлопот? Получу ли я что-нибудь в исполнении или в любом другом аспекте? Или вы знаете какой-нибудь другой метод, который я могу сделать такого рода вещи? Я не знаю, как правильно выразить это в этом сценарии, поэтому я не смог найти ничего подходящего ...
Заранее спасибо.