2017-06-23 12 views
0

これは私のコントロールである使用Html.BeginFormコントロールにアクション名を見つけることができません(のasp.net MVC)

enter image description here

/ProductController.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using ShoppingStore.Domain.Abstract; 
using ShoppingStore.Domain.Entities; 
using ShoppingStore.WebUI.Models; 

namespace ShoppingStore.WebUI.Controllers 
{ 
    public class ProductController : Controller 
    { 
     private IProductsRepository repository; 

     public int PageSize = 4; 

     public ProductController(IProductsRepository productRepository) 
     { 
      this.repository = productRepository; 
     } 


     public ViewResult List(string category , int page=1) 
     { 
      ProductsListViewModel model = new ProductsListViewModel 
      { 
       // Products = repository.Products.OrderBy(p => p.ProductID).Skip((page - 1) * PageSize).Take(PageSize), 
       Products = repository.Products.Where(p => category ==null || p.Category ==category).OrderBy(p => p.ProductID).Skip((page - 1) * PageSize).Take(PageSize), 
       PageInfo = new PagingInfo {CurentPage = page,ItemPerPage = PageSize,TotalItems = category == null ? repository.Products.Count() : repository.Products.Where(e => e.Category == category).Count()}, 
       CurrentCategory = category 
      }; 

      return View(model); 
     } 
     [HttpPost] 
     public ActionResult Save(List<string> hiddenList) 
     { 
      return View(); 
     } 

    } 
} 

enter image description here

このis View

/Views/Product/List.cshtml

@model ShoppingStore.WebUI.Models.ProductsListViewModel 

@{ 
    ViewBag.Title = "Prodcuts"; 

} 

<script src="~/Scripts/pop_window.js"></script> 
<script src="~/Scripts/tool.js"></script> 

@foreach (var p in Model.Products) 
{ 
@Html.Partial("ProductSummary",p) 
} 
<div> 
    @Html.PageLinks(Model.PageInfo, x => Url.Action("List", new { page = x , category = Model.CurrentCategory})) 
</div> 
<div> 

    <div id="result" style="display:none;"></div> 

    @using (Html.BeginForm("Save", "Product", FormMethod.Post)) 
    { 
     <div id="dialog" title="Basic dialog"> 
      <ol id="test"></ol> 
      <div id="detail"> 
       <div> 
        <input class="ice-checkbox" type="checkbox" name="driink_d" id="BigICE" value="BigICE">cold/big/L $8<br> 
        <input class="ice-checkbox" type="checkbox" name="driink_d" id="MidHOT" value="MidHOT">hot/mid/M $7<br> 
        <input class="ice-checkbox" type="checkbox" name="driink_d" id="BigHOT" value="BigHOT">hot/big/L $7<br> 
       </div> 
       <div> 
        <input class="size-checkbox" type="checkbox" name="driink_d" id="NOICE" value="NOICE">no ice<br> 
        <input class="size-checkbox" type="checkbox" name="driink_d" id="NORL" value="NORL">normal<br> 
        <input class="size-checkbox" type="checkbox" name="driink_d" id="LESSICE" value="LESSICE">less ice<br> 
       </div> 
       <div> 
        <input class="sugar-checkbox" type="checkbox" name="driink_d" id="LESS" value="LESS">Less<br> 
        <input class="sugar-checkbox" type="checkbox" name="driink_d" id="HALF" value="HALF">half<br> 
        <input class="sugar-checkbox" type="checkbox" name="driink_d" id="FULL" value="FULL">full<br> 
        <input class="sugar-checkbox" type="checkbox" name="driink_d" id="NOS" value="NOS">no<br> 
       </div> 
      </div> 

      <div> 
       <div id='DIV2'><input type="button" onclick="incrementValue1()" value="ADD" /></div> 
       <div id="DIV2"> <input type="text" id="number1" value="0" /></div> 
       <div id="DIV2"><input type="button" onclick="decrementValue1()" value="minus" /></div> 
      </div> 


      <button id="checkvalue" onclick="checkValue()" type="submit">Check</button> 

     </div> 

    } 

私のプロジェクトが起動すると、List.cshtmlの作業は正常です。

データベースからデータを読み取り、ブラウザに情報を表示できます。

しかし、私はフォームを持っていて、ProductController.csにいくつかの値を送る必要があります。

ProductController.csにブレークポイントを設定しても機能しません。

使用Html.BeginForm("Save", "Product", FormMethod.Post)

それはあなたが以下を使用してメソッドのシグネチャを変更する必要がありますProductController.csに

+1

あなたのメソッドは '[HttpPost]'ではありませんが、他のエラーがあり、 'hiddenList'の値は' null'になります。 –

+0

[HttpPost]を追加すると動作しません。あなたのrelpyを感謝します。 – square

+0

保存アクションが見つからないことを知らせるエラーメッセージが表示されますか?または、コアの問題が保存アクションを見つけることができないということをどのように知っていますか? –

答えて

2

を「保存」アクション名を見つけることができません。

[HttpPost] 
public ActionResult Save(ProductsListViewModel modelData) 
     { 
      return View(); 
     } 

今すぐチェックして、私に知らせて!!

1

私はあなたのコードをテストして、それは私のマシン上で正常に動作します。フォームを送信するときにJavascript関数をトリガーすることに気付きました。これは問題の原因となる可能性があります。ブラウザーでF12を押してデベロッパーツールをオンにし、コンソールにエラーが表示されているかどうかを確認します。

エラーページが表示された場合は、エラーの詳細を表示して助けてください。

はまた、あなたが成功したコントローラにフォームの値を渡すために変更する必要があるいくつかの部分があります。それは一意である必要がありますので

  1. HTML属性idは、要素自体に参照するために使用されます。複数の要素が同じページ内に同じidを持つ場合、idを使用してJavaScriptにアクセスすると、最初の要素のみが検出されます。

  2. HTML属性nameは、フォームがサブミットされた 要素の値を参照するために使用され、そして.NET MVCコントローラのパラメータで 値をバインドするためにそれを使用します。指定したnameがコントローラのパラメータの名前と一致することを確認します。

    <div id="DIV2"> <input type="text" name="number1" value="0" /></div> 
    

    そして、あなたのコントローラは次のようになります。

    [HttpPost] 
    public ActionResult Save(List<string> driink_d, int number1) 
    { 
        // Do something here 
    } 
    

それはエラーページを示した場合は、エラーの詳細を含めることが非常に役立つだろう。

関連する問題