2011-01-18 6 views
8

Я создал вид страницы в MVC какКнопка событий в ASP.NET MVC

<%using (Html.BeginForm()) 
{ %> 
    <%=LabelHelpers.Label("firstname", "FirstName:")%> 
    <br/> 
    <%=Html.TextBox("firstname")%> 
    <br/><br/> 
    <%=LabelHelpers.Label("lastname", "Lastname:")%> 
    <br/> 
    <%=Html.TextBox("lastname")%> 
    <br/><br/> 
    <input type="Button" value="Register"/> 
<%} %> 

Здесь я хочу написать ButtonClick событие ... Как и где я должен написать?

ответ

12

Ваши данные вводятся button - эти изделия не действуют без дополнительного кода на стороне клиента.

Если вы хотите обрабатывать «событие» на сервере аналогично тому, как это было бы в ASP.NET, вы должны преобразовать его в кнопку отправки. Если предположить, что контроллер называется «Счет» и ваше действие называется «Регистрация» Ваш текущий код будет выглядеть что-то так:

public ViewResult Register() 
{ 
    return View(); 
} 

Вы хотите начать пропусканием модель с точки зрения:

public ViewResult Register() 
{ 
    var registerModel = new RegisterModel(); 

    return View(registerModel); 
} 

Ваш текущий вид использует слабо типизированные входы. Поскольку вы передаете ему модель, вы можете использовать строго типизированные представления. Ваша модель должна выглядеть примерно так:

public class RegisterMode 
{ 
    public string Firstname { get; set; } 
    public string Surname { get; set; } 
} 

Чтобы использовать сильно типизированные, изменить ваш взгляд выглядеть следующим образом:

<%using (Html.BeginForm()) 
{ %> 
    <%=Html.LabelFor(x => x.Firstname)%> 
    <br/> 
    <%=Html.TextBoxFor(x => x.Firstname)%> 
    <br/><br/> 
    <%=Html.LabelFor(x => x.Surname)%> 
    <br/> 
    <%=Html.TextBoxFor(x => x.Surname)%> 
    <br/><br/> 
    <input type="submit" value="Register"/> 
<%} %> 

То, что мы сделали, сказали мнению, чтобы построить этикетки и текст коробки для вашего типа RegisterModel. Это позволит автоматически отображать значения модели при отправке формы на контроллер.

ли принимать почту, нам нужно добавить новое действие в контроллер, с тем же именем, но принимать параметр типа RegisterModel:

public ActionResult Register(RegisterModel model) 
{ 
    // do something with the model, such as inserting it into the database. 
    // model.Firstname will contain the value of the firstname textbox 
    // model.Surname will contain the value of the surnaem textbox 

    return RedirectToAction("Success"); 
} 

Одна последняя вещь, чтобы сделать, чтобы быть безопасным, чтобы добавить атрибуты [HttpGet] и [HttpPost] на ваши действия контроллера для управления методы, которые они принимают:

[HttpGet] 
public ViewResult Register() 

и

[HttpPost] 
public ActionResult Register(RegisterModel model) 

Предлагаю вам ознакомиться с MVC по телефону http://www.asp.net/mvc и прочитать главу NerdDinner в разделе «Профессиональный MVC» (доступен бесплатно в формате PDF).

1

присоединение к вопросу, хочу сделать его более конкретным

У меня есть форма, форма уже имеет кнопку отправки, но мне нужно, чтобы связать дополнительное действие на другую кнопку. Да, я знаю, что MVC не поддерживает события, потому что HTML-формы не поддерживают их.

поэтому решение, к которому я пришел, - это создать скрытые входы внутри формы и связать событие «onclick» (метод jquery «live») с каждым ... о, какого черта?вот код:

HTML:

<input type="hidden" id="SenderControlID" name="SenderControlID" value="-1" /> 
<input type="hidden" id="SenderControlValue" name="SenderControlValue" value="-1" /> 

ЯШ:

if ($('#SenderControlID')[0]) { 
     $('input[type="submit"], input[type="button"], input[type="checkbox"], input[type="radio"]').live('click', function() { 
      $('#SenderControlID').val($(this).attr('name')); 
      $('#SenderControlValue').val($(this).val()); 
     }); 
    } 

но, возможно, есть более элегантное решение?

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