2010-10-23 6 views
5

Ich mache eine Webseite (http://example.com/calculation/). Diese Seite wird einfache Berechnungen durchführen. Die Seite präsentiert dem Benutzer zwei Eingabefelder in Form von Textfeldern (asp: TextBox). Ich frage mich, wie ich mit dem Klicken auf den "Calc" -Button (asp: Button) umgehen soll?Richtiger Weg, Knopf Klicks in asp.net mvc zu behandeln?

Verwenden Sie den Controller für die Seite, seit ich MVC-Vorlage verwende? Wie soll ich meinen Code organisieren?

Ich möchte die Benutzereingabe in den beiden Textfeldern abrufen und den Wert in einem "Ergebnis" Label ausgeben.

+0

Haben Sie vor, dies über Ajax zu tun? – ahsteele

+0

nein. nur Daten einreichen, berechnen und zurückgeben – Jason94

Antwort

12

Der einfachste saubere Weg bietet eine Model-Klasse, einen Controller und eine View. Bitte schauen Sie sich das folgende Beispiel:

Das Modell:

public class CalculatorModel { 
    public int Result { get; set; } 
    public int FirstOperand { get; set; } 
    public int SecondOperand { get; set; } 
} 

Der Controller:

public class CalculatorController : Controller { 
    [HttpGet] 
    public ActionResult Sum() { 
     CalculatorModel model = new CalculatorModel(); 
     //Return the result 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Sum(CalculatorModel model) { 
     model.Result = model.FirstOperand + model.SecondOperand; 
     //Return the result 
     return View(model); 
    } 
} 

The View:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<CalculatorModel>" %> 

    <% using (Html.BeginForm("Sum", "Calculator", FormMethod.Post, new { id = "calcForm" })) { %> 
     <table border="0" cellpadding="3" cellspacing="1" width="100%"> 
     <tr valign="top"> 
      <td> 
       <%= Html.LabelFor(model => model.FirstOperand) %> 
       <%= Html.TextBoxFor(model => model.FirstOperand) %> 
      </td> 
     </tr> 
     <tr valign="top"> 
      <td> 
       <%= Html.LabelFor(model => model.SecondOperand) %> 
       <%= Html.TextBoxFor(model => model.SecondOperand) %> 
      </td> 
     </tr> 
     </table> 
     <div style="text-align:right;"> 
      <input type="submit" id="btnSum" value="Sum values" /> 
     </div> 
    <% } %> 

Mein Rat ist es, einige Tutorial über ASP folgen .NET MVC. Sie können viele mit Google finden. Die ASP.NET MVC web site ist ein guter Anfang.

Hoffe es hilft!

+0

Genau das, was ich gesucht habe, danke! – Jason94

+0

@ Jason94: Gern geschehen – Lorenzo

+0

Gute, saubere Antwort. +1 – RPM1984

3

Ich glaube, dass Ihre Frage auf ein häufiges Missverständnis für Neuankömmlinge an das MVC-Entwurfsmuster angelehnt ist. Im MVC-Entwurfsmuster ist es wichtig, wie Sie Ihr Modell, die Ansicht und die Controller organisieren.

Das heißt, Web-Frameworks wie ASP.NET MVC empfehlen bestimmte Organisationen wegen ihrer Tendenz, Muster-Implementierung über die URLs einer Website offenzulegen. Zur Veranschaulichung zeigt ASP.NET MVC diese Route http://example.com/calculation/add für die Aktion add des Berechnungscontrollers. Als Entwickler können Sie dieses Verhalten überschreiben, indem Sie custom routes erstellen, was bedeutet, dass Sie Ihre Modelle, Ansichten und Controller auf eine Weise organisieren sollten, die für Sie logisch ist.

Da per Definition Ihre Website nur einfache Berechnungen durchführt, würde ich empfehlen, einen einzigen Controller mit einer Vielzahl von Aktionen zu erstellen: hinzufügen, subtrahieren, teilen usw. Lorenzo bietet die Grundlage für den Einstieg in his answer.

Verwandte Themen