2013-09-07 3 views
1

Хорошо, поэтому я только что начал с бритвы mvc4, и у меня есть небольшой опыт работы с C#. В настоящее время я создаю веб-сайт, на котором есть кнопка. мой HTML следующим образом:razor mvc4 и C# codebehind

<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) 
     { 
     } 
    } 
} 

Я считаю, что мой вопросом является глубоким пониманием структуры бритвы, но не мог понять это самостоятельно.

Любая помощь вообще оценивается, и я постараюсь не чувствовать себя слишком глупо, когда ответ прост.

Спасибо!

EDIT:

Я получаю вопрос, где Add (имя строки) дает мне ошибку «не все пути кода возвращают значение»

вот остальная часть моего кода в соответствии с просьбой:

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> 

Спасибо!

+1

Ваше понимание Бритва не проблема, по крайней мере на данный момент. Вы» re, не понимая разницы между ASP.NET MVC и ASP.NET WebForms. –

ответ

8

Вы запутались с WebForms ASP.NET и MVC. MVC работает больше в классическом стиле Web (GET-POST). Вы отправляете форму со значениями. Не существует таких событий кликов и обработчиков событий в коде, как у вас в веб-формах.

Таким образом, чтобы сделать вашу страницу, вы можете иметь метод действия, как это в вашем HomeController

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

Итак, на ваш взгляд Add (Бритва-файл), вам нужно иметь некоторый код для визуализации формы тег входные элементы. Давайте используем метод вспомогательного метода формы 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 
} 
+0

Что такое назначение RedirectToAction? –

+0

@HarrisonGibbs Это перенаправит вам метод действия «Успех». Используйте его, чтобы придерживаться шаблона PRG.http:// /www.stevefenton.co.uk/Content/Blog/Date/201104/Blog/ASP-NET-MVC-Post-Redirect-Get-Pattern/ – Shyju

+0

add (имя строки) дает мне ошибку "не все пути кода вернуть значение « –

3

Возможно, вы сбиваете с толку модель webform с моделью asp.net mvc.

бритва доступна только вам при использовании веб-страниц или asp.net mvc.

Для asp.net mvc нет понятия серверного метода/события, как вы определили здесь.

Обычно вам необходимо определить методы действий в контроллерах, которые будут отвечать за обработку любых форм, которые вы публикуете.

Вы можете проверить больше на ASP.NET MVC

2

MVC не реализует веб-формы в стиле ViewState и обработчики событий. Таким образом, нет голоса_1. То, что вы хотели бы сделать это либо

1) Создать JavaScript Post/Get обратно на сервер

или

2) имеют форму и отправить обратно все переменные формы на сервер

Вот очень хороший пример начала MVC: http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4

Смежные вопросы