私は1つのビューに結合する必要がある2つのモデルがあります。最初のモデル複数のモデル単一のビューAsp.net mvc
class MainTransaction
public MainTransaction()
{
this.SubTransactions = new HashSet<SubTransaction>();
}
public int id { get; set; }
public System.DateTime TransactionDate { get; set; }
public string bank { get; set; }
public string narration { get; set; }
public string RecievedFrom { get; set; }
public string VoucherType { get; set; }
public string VoucherNo { get; set; }
public string description { get; set; }
public string DistrictCode { get; set; }
public virtual ICollection<SubTransaction> SubTransactions { get; set; }
}
両方のモデルが関連している
public class SubTransaction
{
public int id { get; set; }
public int MainTransactionId { get; set; }
public int HeadCode { get; set; }
public int subsidiary { get; set; }
public int fund { get; set; }
public int district { get; set; }
public int sector { get; set; }
public int gender { get; set; }
public double debit { get; set; }
public double credit { get; set; }
public string payee { get; set; }
public string ChequeNo { get; set; }
public string AccountDescription { get; set; }
public virtual District District1 { get; set; }
public virtual Fund Fund1 { get; set; }
public virtual Head4 Head4 { get; set; }
public virtual MainTransaction MainTransaction { get; set; }
public virtual Sector Sector1 { get; set; }
public virtual Subsidiary Subsidiary1 { get; set; }
}
セカンドモデル。このモデルに基づいて、両方のモデルのプロパティを含むビューバウチャーを作成する必要があります。ビューにこのモデルを渡すために、私は別のモデルバウチャー
public class Voucher
{
public MainTransaction mt {get;set;
public List<SubTransaction> st {get;set;};
}
ビュー @model ModelFormBindingTutorial.Models.Voucher @ { ViewBag.Title = "CreateVoucher" を作成しました。 }
<form method="post" action="StoreVoucher">
<table border="1" class="table-bordered table-condensed table-hover" >
<tr>
<th>TransactionDate</th>
<th>Bank</th>
<th>Narration</th>
<th>RecievedFrom</th>
<th>VoucherType</th>
<th>Voucher No.</th>
<th>Description</th>
<th>DistrictCode</th>
</tr>
<tr>
<td>@Html.TextBoxFor(m => m.mt.TransactionDate, new { @Value = "12/12/2014" })</td>
<td>@Html.TextBoxFor(m => m.mt.bank, new { @Value = "Allied Bank" })</td>
<td>@Html.TextBoxFor(m => m.mt.narration,new { @Value = "Some Stuff Going on"})</td>
<td>@Html.TextBoxFor(m => m.mt.RecievedFrom, new { @Value = "Recieved From" })</td>
<td>@Html.TextBoxFor(m => m.mt.VoucherType, new { @Value = "BPV" })</td>
<td>@Html.TextBoxFor(m => m.mt.VoucherNo, new { @Value = "BPV-12-2016-GGG" })</td>
<td>@Html.TextBoxFor(m => m.mt.description, new { @Value = "Some Description" })</td>
<td>@Html.TextBoxFor(m => m.mt.DistrictCode, new { @Value = "001" })</td>
</tr>
</table><br />
<table border="1" class="table-bordered table-condensed table-hover">
<tr>
<th>
</th>
</tr>
<tr>
<th style="width:120px">HeadCode</th>
<th style="width:70px">Subsidiary</th>
<th style="width:70px">Funds</th>
<th style="width:70px">District</th>
<th style="width:70px">Sector</th>
<th style="width:70px">Gender</th>
<th style="width:200px">Debit</th>
<th style="width:200px">Credit</th>
<th>Payee</th>
<th>ChequeNo</th>
<th>AccountDescription</th>
</tr>
@for (var i = 1; i < 3; i++)
{
<tr>
<td>@Html.TextBoxFor(v => v.st[i].HeadCode, new { @Value = "001" })</td>
<td>@Html.TextBoxFor(v => v.st[i].subsidiary, new { @Value = "002" })</td>
<td>@Html.TextBoxFor(v => v.st[i].fund, new { @Value = "003" })</td>
<td>@Html.TextBoxFor(v => v.st[i].district, new { @Value = "004" })</td>
<td>@Html.TextBoxFor(v => v.st[i].sector, new { @Value = "005" })</td>
<td>@Html.TextBoxFor(v => v.st[i].gender, new { @Value = "01" })
</td>
<td>@Html.TextBoxFor(v => v.st[i].debit, new { @Value = "40000" })</td>
<td>@Html.TextBoxFor(v => v.st[i].credit,new { @Value = "5005"})</td>
<td>@Html.TextBoxFor(v => v.st[i].payee, new { @Value = "Biltoon Gulab" })</td>
<td>@Html.TextBoxFor(v => v.st[i].ChequeNo, new { @Value = "4204" })</td>
<td>@Html.TextBoxFor(v => v.st[i].AccountDescription, new { @Value = "Some Description" })</td>
</tr>
}
</table><br />
<div style="float:right; width:400px" >
<input size="23" type="text" value="Total" />
</div>
<input type="submit" class="btn btn-default" />
そしてビューで、私はクーポンモデルを渡します。フォームが送信されると、コントローラアクションで、MainTransactionのオブジェクトが作成されますが、SubTransactionは常にNullを返します。私はなぜSubTransactionがNullであるのか、MainTransactionオブジェクトが作られる理由を理解できません。
任意の提案
はい:あなたは、フォームを送信する前副トランザクションを設定していない場合常にnullです。 "Html.HiddenFor(x => x.st)"(ビュー内)またはそのようなものを試して、Voucher.stを保存してください。 – itmuckel
最初の問題は、それらがフィールドであり、プロパティではないことです(フィールドは 'DefaultModelBinder'によって束縛されません)。彼らはまた公開されていません - 'public MainTransaction mt {get; set} public List <サブトランザクション> st {get;セット; } ' –
ViewでSubTransactionにデータを設定していますか?もしそうでなければ、なぜそれをコントローラからビューに渡していますか? –