2

Windows 2008 R2サーバー(IIS 7.5)でいくつかの従来のASP Webサイトを実行していて、単純なMVC3eコマースサイトを追加しました。問題は、フォームを使用して商品ページからショッピングカートに商品を追加しようとしたときです。Razor構文を使用すると、次のコードがあります。

@using (Html.BeginForm("Add", "Cart", FormMethod.Post, new { }))
{
    @Html.HiddenFor(m => m.Id)
    @Html.TextBoxFor(m => m.Quantity, new { size = "1" })
    <input type="submit"  value="Add to Cart"/>
}

public class AddToCartViewModel
{
    public string Id { get; set; }
    public int Quantity { get; set; }
}

[HttpPost]
public ActionResult Add(AddToCartViewModel cartItem)
{
    // Code that adds the item to the cart

    // Go back to the product page
    return RedirectToAction("Model", "Product", new { id = cartItem.Id });
}

問題は、ModelIdとQuantityにフォームのデータが入力されていないことです。cartItemはnullではなく、このアクションが呼び出されています。このコードは、Visual Studio 2010で実行すると完全に機能するため、サーバーやIISの構成設定であると推測しています。奇妙なことに、ショッピングカート用の別のページがあり、ユーザーはカート内のアイテムの数量を更新できます。これは非常に効果的です。このページはビューモデルのリストを使用しているため、単純なリクエストが失敗する理由がわからないため、より複雑です。

フォームの代わりにActionLink(ハードコードされた数量)を使用すると機能します。

@Html.ActionLink("Add to cart", "Add", "Cart", new { Id = Model.Id, Quantity = 1}, new {})

アクションメソッドのシグネチャを文字列と整数を取るように変更しようとしましたが、数量がnullであるため、例外がスローされます。

ストローをつかんで、次の手順を実行して.NET 4.0が登録されていることを確認しましたが、問題ないようです。私は2.0.50727.0と、4.0.30319.0のx32およびx64バージョンを持っています

PhilHaackの指示に従ってアプリケーションをデプロイするBinも機能しませんでした

Visual Studioですべてが機能するため、アイデアがありません。同じ問題を抱えている他の投稿を見つけることができません。単純なものが足りないだけですか?また、アカウントコントローラーを介したログインがサーバーでも機能しないことに気づきました。エラーや検証の問題は表示されていません。デフォルトのメンバーシッププロバイダーを使用していますが、web.configは独自のデータベースを使用するように構成されています。新しいユーザーを登録でき、登録が成功するとその新しいユーザーがログインするため、接続は機能します。

4

2 に答える 2

1

[編集]

質問を更新したので、回答を更新しました。問題は、追加アクションの最初のgetリクエストでモデルを初期化していないという事実にあると思います。以下のようにHttpGetとを追加してみてください。HttpPost

[HttpGet]
public ActionResult Add()
{
    var viewModel = new AddToCartViewModel() 
    {
        Id = "myid", 
        Quantity = 0
    };
    return View(viewModel);
}

[HttpPost]
public ActionResult Add(AddToCartViewModel cartItem)
{
    // Code that adds the item to the cart

    // Go back to the product page
    return RedirectToAction("Model", "Product", new { id = cartItem.Id });
}

これでうまくいくと確信しています。

于 2012-07-09T17:10:36.580 に答える
0

強く型付けされたhtmlヘルパーを使用する

@Html.HiddenFor(m => m.Id)     
@Html.TextBoxFor(m => m.Quantity, new { size = "1" }) 

アクションにマークを付けていることを確認してください[HttpPost].

于 2012-07-09T16:21:48.943 に答える