1

よし、かみそり mvc4 を使い始めたばかりで、c# の経験が少しあります。私は現在、ボタンがあるウェブサイトを作成しています。私のhtmlは次のとおりです。

<button onclick ="vote1_click"  id="VoteButton" value="Vote">Vote</button>

これは .cshtml ビューにあります

次に、vote1_click イベントを処理するクラスを作成します。それはC#であり、次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcApplication1
{
    public class voting
    {
        public void vote1_click(object sender, EventArgs e)
        {
        }
    }
}

私の問題は、かみそりの構造の基本的な理解だと思いますが、自分で理解することはできませんでした。

どんな助けでも大歓迎です。答えが単純な場合でも、私はあまり愚かに感じないようにします。

ありがとう!

編集:

Add(string name) で「すべてのコード パスが値を返すわけではない」というエラーが表示されるという問題が発生しています。

要求された残りのコードは次のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.SqlClient;

namespace WAgermanClub.Controllers
{
public class HomeController : Controller
{

    [HttpPost]
    public ActionResult Add(string vote)
    {




        SqlConnection vote1connection = new SqlConnection("user id=userid;" +
                                      "password=validpassword;server=o5z5dpwpzi.database.windows.net;" +
                               "Trusted_Connection=yes;" +
                               "database=wagermanclub_votes; " +
                               "connection timeout=30");
        try
        {
            vote1connection.Open();
        }
        catch (Exception g)
        {
            Console.WriteLine(g.ToString());
        }

        try
        {
            SqlDataReader myReader = null;
            SqlCommand myCommand = new SqlCommand("select * from table", vote1connection);
            myReader = myCommand.ExecuteReader();
            while (myReader.Read())
            {

                Console.WriteLine(myReader["Vote1"].ToString());
            }
        }
        catch (Exception i)
        {
            Console.WriteLine(i.ToString());
        }


        SqlCommand vote1command = new SqlCommand("INSERT INTO table (Column1, Vote1) " +
                              "Values (1, 'Vote1' + 1)", vote1connection);


        vote1command.ExecuteNonQuery();

        try
        {
            vote1connection.Close();
        }
        catch (Exception h)
        {
            Console.WriteLine(h.ToString());
        }






    }
}

}

そして、ここに私のHTMLがあります:

@{
ViewBag.Title = "Ideas";

}

 @section featured {
<section class="featured">
    <div class="content-wrapper">
        <hgroup class="title">
            <h1>@ViewBag.Title.</h1>
            <h2>@ViewBag.Message</h2>
        </hgroup>
        <p>

        </p>
    </div>
</section>
}

<body>
<div  style="border: solid; max-width: 300px; margin-left: auto; margin-right: auto">


    @using(Html.BeginForm())
    {

    <input type="submit" value="Vote"/>
    }

 </div>




</body>

ありがとう!

4

3 に答える 3

9

ASP.NET Web フォームと MVC を混同しています。MVC は、従来の Web (GET-POST フォーム) スタイルでより機能します。値を含むフォームを投稿します。コードビハインドには、Web フォームにあるようなクリック イベントやイベント ハンドラはありません。

したがって、ページをレンダリングするには、HomeController に次のようなアクション メソッドを含めることができます。

public class HomeController : Controller
{
   public ActionResult Add()
   {
     return View();
   }
}

そのため、追加ビュー (カミソリ ファイル) には、入力要素を含むフォーム タグをレンダリングするためのコードが必要です。Html.Beginフォーム ヘルパー メソッドを使用して、フォーム タグをレンダリングしましょう。

@using(Html.Beginform())
{    
  <input type="text" name="name" />
  <input type="submit" />
}

これによりform、アクション プロパティが " Home/Add" に設定されたタグがマークアップに表示されます。GET アクション メソッドが HomeController にあると仮定します。(ページの閲覧元をご確認ください)

したがって、ユーザーが送信ボタンをクリックすると、フォームがAddアクションに投稿されます。そのため、フォームの投稿を処理するために HomeController にこのようなアクション メソッドがあることを確認してくださいHttpPost

[HttpPost]
public ActionResult Add(string name)
{
  //do something with the posted values
  return RedirectToAction("Success");  // redirecting to another view
}
于 2013-09-07T03:00:28.013 に答える
3

webforms モデルと asp.net mvc モデルを混同している可能性があります。

razor は、Web ページまたは asp.net mvc を使用している場合にのみ使用できます。

asp.net mvc の場合、ここで定義したサーバー メソッド/イベントの概念はありません。

通常、投稿するフォームの処理を担当するコントローラーでアクション メソッドを定義する必要があります。

ASP.NET MVCの詳細を確認することをお勧めします。

于 2013-09-07T02:54:46.697 に答える
2

MVC は、Web フォーム スタイルのビューステートとイベント ハンドラーを実装しません。したがって、vote1_click はありません。あなたがしたいことはどちらかです

1) JavaScript ポストを作成する/サーバーに戻る

また

2) フォームを作成し、すべてのフォーム変数をサーバーにポスト バックします。

MVC を開始するための非常に良い例を次に示します。

于 2013-09-07T02:54:49.467 に答える