Ich habe zwei Modelle, siehe unten, und versuche, eine von jedem in die Datenbank von einer Ansicht einfügen. Ich habe eine Ansicht Modell in einem Versuch, dies zu tun erstellt.
public class Blog
{
public int BlogID { get; set; }
public string Title { get; set; }
public DateTime CreatedOn { get; set; }
public virtual User User { get; set; }
public virtual ICollection<BlogPost> Posts { get; set; }
}
public class BlogPost
{
public int PostID { get; set; }
public string Body { get; set; }
public DateTime CreatedOn { get; set; }
public int UserID { get; set; }
public virtual User User { get; set; }
}
public class BlogViewModel
{
public Blog Blog { get; set; }
public BlogPost BlogPost { get; set; }
}
Mit der Ansicht Modell ich bin Posting an den Controller erstellen:
[HttpPost]
public ActionResult Create(BlogViewModel blog)
{
if (ModelState.IsValid)
{
User user = unit.UserRepository.GetUser();
blog.Blog.User = user;
blog.Blog.CreatedOn = DateTime.Now;
unit.BlogRepository.Insert(blog.Blog);
unit.BlogPostRepository.Insert(blog.BlogPost);
unit.Save();
return RedirectToAction("Index");
}
return View(blog);
}
Dies führt immer wieder zu der Fehlermeldung
Objektreferenz nicht auf eine Instanz eines Objekts gesetzt.
auf der Linie blog.Blog.User = user
.
Irgendwelche Ideen, was ich falsch mache?
EDITAR Ich habe die POST-Daten überprüft und sie waren alle vorhanden und korrekt, aber es wurde alles als Blog.Title =
y BlogPost.Body =
also empfing das Viewmodel im Controller nichts. Wenn ich den Controller actionresult zu ändern:
public ActionResult Create(Blog blog, BlogPost post)
Dann funktioniert alles. Warum werden die Daten dann nicht im Viewmodel-Format gesendet? Ich verwende explizite Viewmodell-basierte Interaktion zwischen Ihren Ansichten und Controller
@model Test.Models.BlogViewModel
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Blog</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Blog.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Blog.Title)
@Html.ValidationMessageFor(model => model.Blog.Title)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.BlogPost.Body)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.BlogPost.Body)
@Html.ValidationMessageFor(model => model.BlogPost.Body)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>