1

チェックしたチェックボックスを mvc コントローラーに取得してデータベースに保存する際に問題が発生しています。create ビューで for each ループを使用してリストを生成しました。

私の広告クラス:

    public class Advert
  {
    public int AdvertId { get; set; }
    public int SponsorId { get; set; }
    [DisplayName("Amount")]
    public int Amount { get; set; }


    [DisplayName("Start date")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yy}")]
    [DataType(DataType.Date)]
    public System.DateTime StartDate { get; set; }

    [DisplayName("End date")]
    [DataType(DataType.Date)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yy}")]
    public DateTime EndDate { get; set; }

    public List<Continent> Continents { get; set; }
    public List<Country> Countries { get; set; }
    public List<Sport> Sports { get; set; }
    public Gender Gender { get; set; }
    public Sponsor Sponsor { get; set; }
    public int SponsorTypeId { get; set; }
  }

(の一部) ビューの作成

    <div class="editor-label">
    @Html.LabelFor(model => model.SponsorId, "Select sport")
</div>

<div class="editor-field">
    @foreach (var item in Model.Sports)
    {
            <tr>
                <td>
                    <input type="checkbox" id="@item.SportId" name="SelectedSport" value="@item.SportId"/>
                </td>
                <td>
                    @item.SportName
                </td>
            </tr> <br />  
    }   
</div>

AdvertController

// POST: /Advert/Create
[HttpPost]
public ActionResult Create(Advert advert)
{
  ViewBag.SponsorId = new SelectList(db.Sponsors, "SponsorId", "SponsorCompany", advert.SponsorId);
  advert.SponsorTypeId = service.sponsorType(advert.Amount);   

    if (ModelState.IsValid)
    {
      db.Adverts.Add(advert);
      db.SaveChanges();
      return RedirectToAction("Index");
    }

    return View(advert);
}

私はこの時点でしばらく立ち往生しているので、どんな助けも大歓迎です!

4

2 に答える 2

2

ID を取得するだけの場合は、名前付きパラメーターを使用するのが最も簡単な方法です。

<input type="checkbox" id="myParams" name="myParams" value="@item.SportId"/>

次に、定義を変更して、そのリストを名前でプルアップします

public ActionResult Create(Advert advert, string[] myParams)
于 2013-05-01T19:28:30.587 に答える
1

SelectedSportモデルにそのようなフィールドがない場合、モデル バインダーはフォームの値をどのようにバインドすると思いますか? Advertこれをクラスに追加する必要があります:

public IEnumerable<String> SelectedSport { get; set; }

次に、選択したチェックボックスの値を入力する必要があります。

さらに、ビューでデータベースエンティティを直接使用しているようです。これは悪いです!別のクラスを作成し、AdvertViewModelこれにコントローラーで必要な値を設定する必要があります。

于 2013-05-01T19:25:15.517 に答える