0
我在使用ASP.MVC中的SelectList时遇到了一些麻烦。Asp-MVC中的SelectList和数据库中的数据
这是问题:我有一个创建视图并begind一个ViewModel模型。
页面加载正常(GET动词)。但是当发布时,会发生一些情况,我的模型被认为是无效的,并且无法插入。这是我迄今为止所尝试的。
public class DefinitionFormViewModel
{
private Repository<Category> categoryRepository = new Repository<Category>();
public Definition ViewDefinition { get; private set; }
public SelectList Categories { get; private set; }
public DefinitionFormViewModel(Definition def)
{
ViewDefinition = def;
// here i wanted to place it directly, like shown in NerdDinner Tutorial
// new SelectList(categoryRepository.All(),ViewDefinition.Category);
Categories = new SelectList(categoryRepository.All(), "CategoryId", "CategoryName", ViewDefinition.CategoryId);
}
}
// pageview which inherits DefinitionFormViewModel
<div class=editor-field">
<%= Html.DropDownList("Category",Model.Categories) %>
<%= Html.ValidationMessageFor(model => Model.ViewDefinition.Category) %>
</div>
// controller methods
[Authorize]
public ActionResult Create()
{
Definition definition = new Definition();
return View(new DefinitionFormViewModel(definition));
}
[AcceptVerbs(HttpVerbs.Post), Authorize]
public ActionResult Create(int id,Definition definition)
{
Term term = termRepository.SingleOrDefault(t => t.TermId == id);
if (term == null)
{
return View("NotFound", new NotFoundModel("Termo não encontrado", "Termo não encontrado",
"Nos desculpe, mas não conseguimos encontrar o termo solicitado.", "Indíce de Termos", "Index", "Term"));
}
else
{
if (ModelState.IsValid)
{
try
{
definition.TermId = term.TermId;
definition.ResponsibleUser = User.Identity.Name;
UpdateModel(definition);
term.Definitions.Add(definition);
termRepository.SaveAll();
return RedirectToAction("Details", "Term", new { id = term.TermId });
}
catch (System.Data.SqlClient.SqlException sqlEx)
{
ModelState.AddModelError("DatabaseError", "Houve um erro na inserção desta nova definição");
}
catch
{
foreach (RuleViolation rv in definition.GetRuleViolations())
{
ModelState.AddModelError(rv.PropertyName, rv.ErrorMessage);
}
}
}
}
return View(new DefinitionFormViewModel(definition));
}
对于这篇较长的文章我很抱歉,但我无法弄清楚。我没有任何图形错误或例外。我的执行结束于if(ModelState.IsValid)。
感谢您的时间
乔治
你好艾哈迈德。我遇到了几个麻烦。我会尝试你的解决方案,我会将其发回。 THanks – 2010-05-27 16:17:00