2016-08-07 6 views
-1

私はすべての認証されたユーザーのために余分な情報を保持するためのテーブルを作成しました。この表はまた、私のdbの多くの他のものにリンクしています。このテーブルは、メンバーシップテーブル(電子メールとユーザー名も同様)と同じ情報を共有する複数のフィールドがありますが、ユーザーIDを介してasp.net IDに接続されています。残念ながら、IDテーブル自体ではなく、追加したユーザーテーブルからこのメンバーシップデータの一部を削除したバグがありました。バグ自体は修正されていますが、私はこの失われた情報をメンバーシップテーブルから取得する方法を作り出そうとしています。私が行ったやり方は、ユーザーの編集画面にボタンを追加することでした(usersadminページではなく、私が追加したユーザーテーブル)。アクションに私を撮影ボタンのための私のコードは次のようになります。 ボタンアクションに
Button to action私が作成したActionMethodは見つかりません

UserResetアクションコードは次のようになります。 UserResetアクションコード
UserReset Action Code

私は現在持っていますトラブル実際にこのアクションを呼び出すことができます(またはこの時点で編集ページを開くことさえできます)。ページを読み込もうとするたびに、「コントローラに見つからないパブリックアクションメソッド」エラーがスローされます。私はそれが私の最後にルーキーの間違いだと感じるが、誰でも私が間違ってやっていることを教えてくださいできますか?

+0

**注:ボタンは、編集ページの残りの部分として、別々のhtml.beginformの内側にあります。これが有用かどうかはわかりませんが、問題の一部になっているようです –

答えて

0

私は裏話に私の舌を保持し、単に質問に答えるつもりです:

だから、あなたは私が見つけた二つの主要なものを持っています。 1つはCSHTMLです(ただし、現在の特定のエラーの直接の原因ではありません)。 CSHTMLの提案については、以下を参照してください(特に、C#アクションの修正後にさらに問題が発生した場合)

まず、コントローラ。 UserResetアクションを見ると、[HttpPost]という装飾が施されています。あなたが言ったように、編集ページを開くことはできません。これは、ページの編集アクションが存在しないためです(たとえば、要求されたURLで[HttpGet]アクション)。これはあなたが必要としているものです:

public class TSTUsersController : IController 
{ 
    ... 
    //You need this action to process the get request 
    [HttpGet] 
    public ActionResult UserReset() 
    { 
     return View("UserReset"); //return the edit form html to the user 
    } 
    //this method will handle the button click 
    [HttpPost] 
    public ActionResult UserReset(String email) 
    { 
     if(ModelState.IsValid) 
     { 
      //save the information to the database 
      //direct the user to some sort of confirmation page 
      return RedirectToAction("Index", "Home"); 
     } 
     //return the form with the error messages 
     return View("UserReset", email); 
    } 
    ... 
} 

あなたが完全に誤解しているHTMLフォームの提出です。ヘルパーを使用して

<form 
    method="POST" 
    action="@Url.Action("UserReset", 'TSTUsers")" //e.g. POST /TSTUsers/UserReset 
    ... > 
    ... 
    <button>Submit</button> 
</form> 

または、::

@using(Html.BeginForm("UserReset", "TSTUsers", FormMethod.Post)) 
{ 
    <button>Submit</button> 
} 

さて、これは指定されたアクションへの投稿です

<form></form>要素は、主に2つのパラメータ、あなたが不足しているがあります。パラメータを追加するには、変更しないパラメータを使用します(ユーザーがメールを入力できないなど).2つのオプションがあります。ヘルパーを使用して、

<form 
    action="@Url.Action("UserReset", 'TSTUsers", new { email = Model.Email })" 
     //e.g. POST /TSTUsers/[email protected] 
    ... > 
    ... 
    <button>Submit</button> 
</form> 

または:あなたは代わりにそうように、(それがあなたにとって重要ならば、ユーザは、非AJAXポスト時に次のURLを参照してくださいすることを、予めご了承ください)パラメータを指定するためにあなたのactionパラメータを変更することができます:あなたが(何らかの理由で)リクエストからURLパラメータを隠すことを好むかどう

@using(Html.BeginForm("UserReset", "TSTUsers", FormMethod.Post, new { email = Model.Email })) 
{ 
    <button>Submit</button> 
} 

さて、あなたは代わりにhiddentypeで、inputを追加します。

<form 
    action="@Url.Action("UserReset", 'TSTUsers")" //e.g. "POST /TSTUsers/UserReset 
    ... > 
    <input type="hidden" name="email" value="@Model.Email" 
    <button>Submit</button> 
</form> 

または、ヘルパーを使用して:

@using(Html.BeginForm("UserReset", "TSTUsers", FormMethod.Post)) 
{ 
    @Html.Hidden("email", Model.Email) 
    <button>Submit</button> 
} 
関連する問題