私は2つのクラスPurchaseDetail
とItemDetail
でCRUD操作を実行しようとしています。子クラスとしてPurchaseDetail
を基本クラス、ItemDetail
としました。だから、私は子クラスのオブジェクトを渡している単一のかみそりのビューで。私が子クラスでCRUD操作を実行しているとき、すべて正常に動作します。しかし、基本クラスで同じことをしようとすると、HttpPostでcreate(ItemDetail obj)を呼び出してデータを追加している間にnullオブジェクトが取得されます。複数のクラスオブジェクトをmvc、asp.netのコントローラーを通してカミソリビューに渡す
これにはどのような解決策がありますか?継承を使用して複数のクラスをビューに渡すのは良い方法ですか?
編集 推敲:クラス以上
public class PurchaseDetail
{
public int ID { get; set; }
[Required]
[Display(Name = "PPRF Name")]
public string pprfName { get; set; }
public int DepartmentID { get; set; }
[Display(Name ="Department")]
public string DepartmentName { get; set; }
public int DepartmentSerial { get; set; }
public List<SelectListItem> MaterialTypes { get; set; }
は、いくつかのプロパティを持つ私の基本クラスです。次に、私の子供のクラスです。
public class ItemDetail: PurchaseDetail
{
public int ItemID { get; set; }
public int ItemCategoryID { get; set; }
public string ItemCategoryName { get; set; }
public int ProductID { get; set; }
私は別のページで両方を取ると問題はありませんでした。しかし、両方のクラスを同じビューに渡したいので、私は継承のために行きました。アイテムを追加するために、同じビューからItemDetailのフォームがポップアップしています。
@model AIIMSINTRANET.Models.ItemDetail
まず、Ajaxコールを使用してItemDetailを挿入しています。ここではうまくいきます。
public JsonResult Add(ItemDetail item)
{
//Insert Logic
}
この後、それぞれのテーブルにPurchaseDetailを挿入します。このビューはTextBoxのようなすべてのフィールドで同じなので、このメソッドを呼び出すときにドロップダウンが塗りつぶされました。 ItemDetailクラスのドロップダウンのような
public ActionResult Create()
{
ItemDetail obj = new ItemDetail();
obj.DeptIndentNo = GetIndentNumber2();
obj.IndentDate = DateTime.Now.Date;
obj.MaterialTypes = PurchaseProposalDO.PopulateMaterialType();
//Initialized all other fields
}
偶数フィールドは、上記の関数の呼び出し中に取り込まれてしまいました。これで、PurchaseDetailを挿入するフォームを送信するとき、以下の関数が呼び出されます。
[HttpPost]
public ActionResult Create(ItemDetail obj)
{
// Insert Logic Here
}
ここに私の問題があります。 objをnullにする理由は何ですか? 私はすべてを入力しています。
<div class="form-group">
@Html.LabelFor(model =>model.pprfName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model =>model.pprfName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.pprfName, "", new { @class = "text-danger" })
</div>
</div>
助けてください。
サンプルコードは、階層を理解し、ヌルオブジェクトを取得している場所を特定するのに役立ちます。私は問題はモデルバインディングだと思っていますが、ソリューションはカスタムモデルバインドを使用することになります。 Microsoft doc:https://docs.microsoft。com/ja-jp/aspnet/core/mvc/advanced/custom-model-binding – theoretical