0

ASP.MVCのSelectListで問題が発生しています。

問題は次のとおりです。ビューの作成があり、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)で終了します。

御時間ありがとうございます

ジョージ

4

1 に答える 1

0

これはから変更する必要があります

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

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

私の限られた理解が正しければ、問題はコントローラーに渡されるパラメーターにあります。を受け入れるビューを作成しましたDefinitionFormViewModelが、サーバーにポストバックするとき、現在のコードはを期待していDefinitionます。

(これが間違っているか反対票を投じられている場合は、私も学びたいと思っているので説明してください)

于 2010-05-27T05:57:18.390 に答える