Вернуть нулевое значение после страницы PostBack в Mvc4

Я хочу создать Invoice Create View. Моя viewModel следующим образом:

public class InvoiceCreate
{
    public IEnumerable<InvoiceItem> InvoiceItems { get; set; }
    public IEnumerable<Recipient> Recipients { get; set; }
    public Sender Sender { get; set; }
    public Invoice Invoice { get; set; }
    public string name { get; set; }
}

Получить метод следующим образом:

  public ActionResult Create()
    {
        InvoiceCreate invoice = new InvoiceCreate();
        invoice.InvoiceItems = (new Invoice.Model.InvoiceItem[20]).AsQueryable();
        invoice.Recipients = (new Recipient[20]).AsQueryable();
        invoice.Sender = new Sender() { Adrress="O.Karimov"};
        invoice.Invoice = new Invoice.Model.Invoice();
        return View(invoice);
    }

Моя точка зрения выглядит следующим образом:

@using (Html.BeginForm(new { id = "submitForm" }))
{
@Html.ValidationSummary(true)
@Html.TextBoxFor(model => model.name);
<div>
    <div id="head">
        <h1>Invoice</h1>
        <div>
            @Html.TextBoxFor(model => model.Invoice.InvoiceNumber, new { placeholder = "Invoice number" })
        </div>... @for (var itemIndex = 1; itemIndex < Model.Recipients.Count(); itemIndex++)
            {
                <div class="recipient-row unvisible">
                    <button type="button" class="close" data-dismiss="alert" style="float: left; margin: 6px;">×</button>
                    @Html.TextBoxFor(model => model.Recipients.ElementAt(itemIndex).CustomerName, new { placeholder = "Contact name" })
                    @Html.TextBoxFor(model => model.Recipients.ElementAt(itemIndex).Email, new { type = "email", placeholder = "example@mail.ru" })
                </div>
            }
        <div class="input-append date" data-form="datepicker" data-date="12-02-2012" data-date-format="dd-mm-yyyy">
            @Html.TextBoxFor(model => model.Invoice.InvoiceDate, new { placeholder = "Invoice date", @Value = System.DateTime.Now.ToShortDateString(), @class = "grd-white", data_form = "datepicker" })
        </div>
    </div>  <button type="submit" id="btnSave" name="Command" value="Save" class="btn btn-primary">Save</button>
    <button type="submit" id="btnSubmit" name="Command" value="SaveDraft" class="btn btn-info">Save as draft</button>
    <button type="submit" id="btnCancel" name="Command" value="Cancel" onclick="$('#submitForm').submit()" class="btn btn-danger">Cancel</button>
    <input type="submit" name="name" value=" " />
</div>
}

Отправьте метод следующим образом:

 [HttpPost]
    public ActionResult Create(InvoiceCreate invoice, string Command)
    {
        switch (Command)
        {
            case "Save":
                {

                }
                break;
            case "SaveDraft":
                {

                }
                break;
            default:
                return RedirectToActionPermanent("Index");
        }
        return RedirectToActionPermanent("Index");
    }

Моя проблема заключается в том, что когда я нажимаю любую кнопку в моей переменной счета-фактуры метода Post, она становится пустой. Как я могу это исправить? Заранее спасибо.

1 ответ

Решение

В вашей ViewModel вам нужно иметь Contructor, инициализирующий сложные свойства, такие как коллекции.

Я думаю, что это "поможет" связующему модели заполнить вашу модель.

Другие вопросы по тегам