1

私はasp.net MVCが初めてです。以下のコードでは、データベースにレコードを追加しようとしています。正常に動作しますが、ビューをロードするたびに null レコードがデータベースに追加されます。

モデル:

 public class multi
    {
        public int CategoryID { get; set; }


        public string CategoryName { get; set; }
        public string Description { get; set; }

        public string DisplayName { get; set; }
        public string Email { get; set; }
    }



 public class CategoryRepository
    {

private BusDataClassesDataContext dc = new BusDataClassesDataContext();

 public void Save()
        {
            dc.SubmitChanges();
        }

         public void AddMulti(multi mu)
                {
                    tblCategory cat = new tblCategory();
                    cat.CategoryName = mu.CategoryName;
                    cat.Description = mu.Description;

                    tblUser user = new tblUser();
                    user.DisplayName = mu.DisplayName;
                    user.Email = mu.Email;

                    dc.tblCategories.InsertOnSubmit(cat);
                    dc.tblUsers.InsertOnSubmit(user);
                }
    }

コントローラ:

CategoryRepository cat = new CategoryRepository();

    public ActionResult AddMulti(multi mu)
            {
                if (ModelState.IsValid)
                {
                    cat.AddMulti(mu);
                    cat.Save();
                    return View(mu);

                }
                else
                {
                    return View(mu);

                }
            }

意見:

 <% using (Html.BeginForm()) {%>
        <%: Html.ValidationSummary(true) %>

        <fieldset>
            <legend>Fields</legend>


            <div class="editor-label">
                <%: Html.LabelFor(model => model.CategoryName) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.CategoryName) %>
                <%: Html.ValidationMessageFor(model => model.CategoryName) %>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(model => model.Description) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Description) %>
                <%: Html.ValidationMessageFor(model => model.Description) %>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(model => model.DisplayName) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.DisplayName) %>
                <%: Html.ValidationMessageFor(model => model.DisplayName) %>
            </div>

            <div class="editor-label">
                <%: Html.LabelFor(model => model.Email) %>
            </div>
            <div class="editor-field">
                <%: Html.TextBoxFor(model => model.Email) %>
                <%: Html.ValidationMessageFor(model => model.Email) %>
            </div>

            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>

    <% } %>

    <div>
        <%: Html.ActionLink("Back to List", "Index") %>
    </div>
4

1 に答える 1

1

これは、モデルに検証がないためModelState.IsValidであり、常に true です。次に、 を介して新しいカテゴリを追加しAddMultiます。このコントローラー メソッドは指定された唯一のメソッドであるため、GET 要求と POST 要求の両方に使用されます。これは、ページを読み込んでフォームをレンダリングするたびに、モデルに空の値を持つ新しいレコードを作成することを意味します。

HttpPostコントローラーをHttpGetメソッドに分割してみてください。

[HttpPost]
public ActionResult AddMulti(multi mu)
{
    if (ModelState.IsValid)
    {
        cat.AddMulti(mu);
        cat.Save();
        return View(mu);
    }
    else
    {
        return View(mu);
    }
}

[HttpGet]
public ActionResult AddMulti()
{
    return View();
}

これで、GET リクエストを介してページにアクセスすると (つまり、最初にアクセスしたとき、フォームを送信する前に)、2 番目のアクション メソッドが起動されるため、その新しいレコードは作成されません。

モデルにいくつかの検証属性を追加することもできます。ドメイン モデルをビューに直接渡しているように見えるため、個別のビュー モデルの作成も検討する必要があります。

于 2013-04-23T07:25:28.677 に答える