0

2つのページがあります。1つはユーザー情報を編集し、もう1つは画像テーブルの情報を編集します。各ページで必要なデータの種類が異なるため、最近、強く型付けされたビューモデルの使用をやめました。

ユーザー情報を編集するページは正常に機能しますが、画像情報を編集するページは、入力フィールドで行われた編集をポストバックしません。正しいIDを除いて、他のすべての値はnullとして返されます。どちらもまったく同じように構成されているようです。違いがわかりません。両方のページのコードが同じであることがわかる限り、2番目のページのデータは返されません。

動作するユーザーコントローラーとビュー

コントローラ

public ActionResult Preferences()
{
    int userid = getUserID(User.Identity.Name);  

    // Info for user preferences
    var accountInfo = db.users.Single(l => l.ID == userid);  

    ViewData["accountInfo"] = accountInfo;

    AccountController usr = new AccountController(); // Info for user menu
    ViewData["userInfo"] = usr.getUserInfo(User.Identity.Name);

     return View();
}

[HttpPost]
public ActionResult Preferences(user accountInfo, string oldPW)
{
    // Do stuff to save user info
    return RedirectToAction(actionname, routeValues);
}

意見

@using (Html.BeginForm("Preferences", null, FormMethod.Post, 
                                            new { id = "prefsform" }))
{
AutoShowApp_MVC.user item = new AutoShowApp_MVC.user();
item = ViewBag.accountInfo;

<input id="lastname" name="lastname" type="text" value="@item.lastname"/>
<input id="address1" name="address1" type="text" value="@item.address1"/>
<input id="city" name="city" type="text" value="@item.city"/>
<input id="state" name="state" type="text" value="@item.state"/>
<input type="submit" value="Submit Changes"  />

}

動作しない画像コントローラとビュー

コントローラ:

public ActionResult Edit(long id)
{
    var picInfo = db.lmit_pics.Single(l => l.ID == id);
    ViewData["picInfo"] = picInfo; // get Picture Info

    // Get User Info for menu
    AccountController usr = new AccountController(); 
    ViewData["userInfo"] = usr.getUserInfo(User.Identity.Name);

    return View();
}

[HttpPost]
public ActionResult Edit(lmit_pics picInfo)
{
    // Do stuff to save picInfo
    return RedirectToAction("Index");
}

意見:

@using (Html.BeginForm("Edit", null, FormMethod.Post, new { id = "editform" }))
{
    AutoShowApp_MVC.lmit_pics item = new AutoShowApp_MVC.lmit_pics();
    item = ViewBag.picInfo;
    <input type="text" id="model" value="@item.model" />
    <input type="text" id="description" value="@item.description" />
    <input type="submit" value="Save" /> 
}
4

1 に答える 1

1

画像編集フォームの入力にname属性が指定されていません。

<input type="text" id="model" value="@item.model" />

あるべき

<input type="text" id="model" name="model" value="@item.model" />

フォームコレクションは、Id属性ではなく、name属性から機能します。これが、データを取得しない理由です(つまり、適切に属性付けされていないだけです)。

ただし、上記のWahidに同意します。強く型付けされたビューモデル、editorForヘルパーなどを使用すると、上記のような問題を防ぐだけでなく、サイトをより安全で保守しやすくするのに大いに役立ちます。

于 2012-06-25T13:14:09.637 に答える