0

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 メソッドの請求書変数で表示されているボタンをクリックすると null になることです。どうすれば修正できますか?前もって感謝します。

4

1 に答える 1

0

ViewModel には、コレクションなどの複雑なプロパティを初期化するコンストラクターが必要です。

これは、モデル バインダーがモデルを埋めるのに「役立つ」と思います。

于 2013-10-31T22:08:22.823 に答える