これは私のモデルです:
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)
私のビューで。修正方法を教えてください。
ありがとうございました