【问题标题】:Passing Multiple Complex Objects in .Net Core From View To Controller将 .Net Core 中的多个复杂对象从视图传递到控制器
【发布时间】:2019-09-10 20:14:25
【问题描述】:

我需要发布一个表单,该表单应该发送一个包含其他对象和对象列表的对象,这个对象可能还包含其他对象。

例子:

class Store{
    string Title;
    string Image;
    List<Classification> Classifications;
    Branch MainBranch;
    List<ContactInfo> StoreContact;
}

class Classification {
    int ID;
    string Title_AR;
    string Title_EN;
}

class Branch{
    string Title;
    Address MainAddress;
    List<ContactInfo> BranchContact;
}

class ContactInfo{
    ContactInfoType  ContactType;
    string  ContactValue;
}

class Address{
    City city;
    Locality locality;
    SubLocality sublocality;
}

我在视图中添加了所有必填字段的表单并将其发布到控制器,但没有将数据解析为对象存储中的复杂对象和列表(我知道我仍然需要编辑输入的命名在 HTML 中,但它也不起作用)

这是查看页面中的表单

<form  asp-controller="Onboarding" asp-action="SaveBranch" method="post" 
  role="form" class="form-horizontal" id="wizard-validation">
    <div class="form-group">
        <div class="col-md-1 store-name">
            <label class="control-label">أسم المتجر</label>
        </div>
        <div class="col-md-4 col-md-offset-1 store-name">
            <input type="text" class="form-control" id="StoreTitle" 
              name="StoreTitle" value="البستان" />
        </div>
        <div class="col-md-1">
            <label class="control-label store-logo-lable">اضف<br>لوجو</label>        
        </div>
        <div class="col-md-2">
            <div class="store-logo-upload pull-right">
                <i class="fa fa-home"></i>
            </div>
            <input class="hidden" type="file" id="file-simple" />
        </div>
    </div>
    <div class="form-group sup">
        <div class="col-md-1">
            <label class="control-label">جهات الاتصال</label>
        </div>
        <div class="form-group col-md-11 form-inline sup pull-left-i " id="klon1">
            <div class="form-group col-md-2 no-pad-lft">
                <select class="form-control select" style="display: none;" name="ContactType">
                    <option>تليفون</option>
                    <option>الايميل</option>
                 </select>
            </div>
            <div class="form-group">
                <input type="text" class="form-control SearchInput" name="Name" />
            </div>
            <div class="form-group CloneBtn">
                <button type="button" class="btn btn-default">
                    <i class="fa fa-plus"></i>
                </button>
            </div>
        </div>
    </div>
    <div class="form-group">
        <div class="col-md-1">
            <label class="control-label">التصنيف</label>
        </div>
        <div class="col-md-6">
            <select multiple class="form-control select" data-live-search="true" 
              title="اختر التصنيف"></select>
        </div>
    </div>
    <h4 class="add-branch-tit">أضافه فرع</h4>
    <hr class="col-md-8 col-md-offset-4">
    <div class="form-group sup">
        <div class="col-md-1">
            <label class="control-label">اسم الفرع</label>
        </div>
        <div class="col-md-4">
            <input type="text" class="form-control" name="Name" />
        </div>
    </div>
    <div class="form-group sup">
        <div class="col-md-1 sys-address-label">
            <label class="control-label">العنوان</label>
        </div>
        <div class="col-md-7">
            <div class="row sys-address">
                <div class="col-md-3">
                    <label class="SubLabel ">الدولة</label>
                    <select class="form-control select">
                        <option>مصر</option>
                        <option>فلسطين</option>
                        <option>السعودية</option>
                    </select>
                </div>
                <div class="col-md-3">
                    <label class="SubLabel ">المحافظة</label>
                    <select class="form-control select">
                        <option>القاهرة</option>
                        <option>فلسطين</option>
                        <option>السعودية</option>
                    </select>
                </div>
                <div class="col-md-3">
                    <label class="SubLabel ">المدينة</label>
                    <select class="form-control select">
                        <option>مدينة نصر</option>
                        <option>فلسطين</option>
                        <option>السعودية</option>
                    </select>
                </div>
                <div class="col-md-3 sup">
                    <label class="SubLabel ">المنطقة</label>
                    <select class="form-control select">
                        <option>عباس العقاد</option>
                        <option>فلسطين</option>
                        <option>السعودية</option>
                    </select>
                </div>
                <div class="col-md-12">
                    <label class="SubLabel ">الشارع</label>
                    <input type="text" class="form-control" name="Name" />
                </div>
            </div>
        </div>
    </div>
    <div class="form-group sup">
        <div class="col-md-1">
            <label class="control-label">جهات الاتصال</label>
        </div>
        <div class="form-group col-md-11 form-inline sup pull-left-i" id="klon1">
            <div class="form-group col-md-2 no-pad-lft">
                <select class="form-control select" style="display: none;">
                    <option>تليفون</option>
                    <option>الايميل</option>
                </select>
            </div>
            <div class="form-group">
                <input type="text" class="form-control SearchInput" name="Name" />
            </div>
            <div class="form-group CloneBtn">
                <button type="button" class="btn btn-default">
                    <i class="fa fa-plus"></i>
                </button>
            </div>
        </div>
    </div>
    <hr>
    <input type="submit" value="الموردون"/>
</form>

这是控制器:

public IActionResult SaveBranch(Store store)
{
    var isSucceed = Store.AddStore(store);
    return isSucceed ? AddSupplier() :  AddBranch("Error");
}

我希望实际输出一个包含联系信息列表的 Store 对象和包含另一个联系信息列表和地址的 MainBranch 对象。

结果只提供了Store的主要信息,其余为空。

【问题讨论】:

    标签: c# forms asp.net-core asp.net-core-mvc


    【解决方案1】:

    您需要为您的输入和选择设置正确的asp-for 属性或名称属性。如果您有一个列表,那么您还需要指定它们的索引,例如asp-for="StoreContact[0].ContactValue"

    一个简单的演示如下所示:

    @model Store
    <form asp-controller="Onboarding" asp-action="SaveBranch" method="post" >
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <div class="form-group">
            <label asp-for="Title" class="control-label"></label>
            <input asp-for="Title" class="form-control" />
        </div>
        <div class="form-group">
            <label asp-for="Image" class="control-label"></label>
            <input asp-for="Image" class="form-control" />
        </div>      
        <div class="form-group">
            <label class="control-label">StoreContact1 ContactValue</label>
            <input asp-for="StoreContact[0].ContactValue" class="form-control" />
    
        </div>
        <div class="form-group">
            <label class="control-label">StoreContact2 ContactValue</label>
            <input asp-for="StoreContact[1].ContactValue" class="form-control" />
    
        </div>
       <div class="form-group">
            <label class="control-label">MainBranch Title</label>
            <input asp-for="MainBranch.Title" class="form-control" />
    
        </div>
        <div class="form-group">
            <label class="control-label">MainBranch City</label>
            <select asp-for="MainBranch.MainAddress.City.CityName" class="form-control" >
              <option>...</option>
            </select>
    
        </div>
        <div class="form-group">
            <input type="submit" value="Create" class="btn btn-primary" />
        </div>
    </form>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-28
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      相关资源
      最近更新 更多