0

これは私のモデルです:

public class Ressource
{
    [Key]
    public int RessourceId { get; set; }
    public string TitreR { get; set; }
    public string Link { get; set; }
    public string Type { get; set; }
    public string Desc { get; set; }
    public int Position { get; set; }
    public int Rating { get; set; }
    public string Tags { get; set; }
    public int SectionId { get; set; }
    public int UserId { get; set; }

}
public class Section
{
    [Key]
    public int SectionId { get; set; }
    public string Titre { get; set; }
    public String Tags { get; set; }

    public virtual ICollection<Ressource> Ressources { get; set; }

}
public class structure
{

        public Ressource ress;
        public List<string> liste;

}

このビューで、リソースのタイトル (TitreR) と説明 (Desc) を入力し、タグを入力するだけでなく、このリソースにリンクするタグをリストから選択します。

@model Mocodis.Models.structure

@{
    ViewBag.Title = "AjouterRessource";
}

<h2>AjouterRessource</h2>

@using (Html.BeginForm("AjouterRessource", "Home", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
    <input type="hidden" name="SectionId" value="@Model.ress.SectionId"  />
    <legend>Ressource</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.ress.TitreR)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.ress.TitreR)
        @Html.ValidationMessageFor(model => model.ress.TitreR)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.ress.Desc)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.ress.Desc)
        @Html.ValidationMessageFor(model => model.ress.Desc)
    </div>
</fieldset>
}
    <form id="orderProductForm219" name="orderProductForm219" method="post" >
<b>Choisir les mots clés:</b> 
<br /><br />


@foreach (string s in @Model.liste)
{
    <input type="checkbox" name="tags[]" value="@s"> @s<br />
}
<input type="text" name="tags" id="tags" value="" /> 


    <p>
        <input type="submit" value="Create" />
        <input type="hidden" name="tag" value="tags" />
        <input type="hidden" name="res" value="@Model.ress" />
    </p></form>

(私はそれにjavascriptを入れませんでした)

最後に、コントローラーは次のとおりです。

public ActionResult AjouterRessource(int SectionId)
    {

        Ressource res = new Ressource();
        res.SectionId = SectionId;
        Section sec = _db.Sections.Where(r => r.SectionId == SectionId).FirstOrDefault();
        char[] delimiterChars = { ' ', ',', '.', ':', '\t' };
        List<string> l = new List<string>();
        l = sec.Tags.Split(delimiterChars).ToList();

        structure s = new structure();
        s.ress = res;
        s.liste = l;

        return View(s);

    }

    public string Check ( string list, string s)
    {
        char[] delimiterChars = { ' ', ',', '.', ':', '\t' };
        List<string> l = new List<string>();
        List<string> liste = new List<string>();
        l = s.Split(delimiterChars).ToList();
        liste = list.Split(delimiterChars).ToList();
        foreach (string item in l)
        {
            if (!liste.Contains(item))
                liste.Add(item);
        }
        return  (string.Join(" ", liste.ToArray()));
    }

    [Authorize]
    [HttpPost]
    [InitializeSimpleMembership]
    public ActionResult AjouterRessource(Ressource res, int SectionId, string tag)
    {
        if (ModelState.IsValid)
        {

            res.SectionId = SectionId;
            var model = _db.Sections.Where(c => c.SectionId == SectionId).FirstOrDefault();
            res.Tags = tag;
            model.Tags = Check(model.Tags, tag);
            _db.Entry(model).State = EntityState.Modified;
            _db.Entry(res).State = EntityState.Added;
            _db.SaveChanges();
            return RedirectToAction("Section", new { SectionId = SectionId });
        }
        return View();

    }

私は取得し続けます: オブジェクト参照が行上のオブジェクトのインスタンスに設定されていません: @Html.ValidationSummary(true)私のビューで。修正方法を教えてください。

ありがとうございました

4

1 に答える 1

2

そのエラーが発生するたびに、何かを初期化していないことが原因です。あなたのコードを見ると、構造を設定しているときだけ必要になるかもしれません。そのクラスにコンストラクターを配置してフィールドを初期化し、それが役立つかどうかを確認してみてください。何かのようなもの

public structure()
{
ress = new Resource();
liste = new List<string>();
}    

おそらく { get; を追加する必要があります。設定; 構造体の下のリソースとリストにも。うまくいけば、これが役に立ちます。

于 2013-07-26T15:10:12.623 に答える