【问题标题】:SelectList in Asp-mvc and data from the databaseAsp-mvc 中的 SelectList 和数据库中的数据
【发布时间】:2010-05-26 18:18:08
【问题描述】:

我在使用 ASP.MVC 中的 SelectList 时遇到了一些问题。

问题是:我有一个 Create View 并开始了一个 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) 中终止。

感谢您的宝贵时间

乔治

【问题讨论】:

    标签: asp.net-mvc-2 selectlist


    【解决方案1】:

    这应该从

    [AcceptVerbs(HttpVerbs.Post), Authorize]
        public ActionResult Create(int id,Definition definition)
        {...}
    

     [AcceptVerbs(HttpVerbs.Post), Authorize]
            public ActionResult Create(int id,DefinitionFormViewModel definition)
            {...}
    

    如果我有限的理解是正确的,那么问题出在传递给控制器​​的参数上。您已经创建了一个接受DefinitionFormViewModel 的视图,但是当您回发到服务器时,您当前的代码需要Definition

    (如果这不正确或被否决,请解释,因为我也渴望学习)

    【讨论】:

    • 你好艾哈迈德。我遇到了几个麻烦。我会尝试你的解决方案,我会把它发回来。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多