2016-04-06 2 views
1

Hi ist es möglich, Parameter von der Ansicht zum Controller zu senden, ohne Ajax zu verwenden?Wie kann man Parameter von View zu Controller übertragen, ohne Ajax in MVC4 zu verwenden?

My View

@Html.LabelFor(model => model.FromDate) 
    @Html.TextBoxFor(model => model.FromDate, new { @class = "form-control", type = "text" }) 

    @Html.LabelFor(model => model.ToDate) 
    @Html.TextBoxFor(model => model.ToDate, new { @class = "form-control", type = "text" }) 

<input id="Button1" type="button" value="Ok" /> 

Mein Controller

public ActionResult GetDates(string FromDate, string ToDate) 
{ 
    DateTime fromdt = Convert.ToDateTime(FromDate); 
    DateTime todt = Convert.ToDateTime(ToDate); 
    SqlConnection con = new SqlConnection(@"Data Source=192.168.0.73\SQLEXPRESS,14330;Initial Catalog=WafeERP_NEW;User ID=sa;Password=wafewin;"); 
    DataTable dt = new DataTable(); 
    try 
    { 
     con.Open(); 
     SqlCommand cmd = new SqlCommand("Select * from View_VisitorsForm where VisitingDate >='" + fromdt +"'and VisitingDate <= '" + todt +"'", con); 
     SqlDataAdapter adp = new SqlDataAdapter(cmd); 
     adp.Fill(dt); 

    } 
    catch (Exception ex) 
    { 

     throw; 
    } 
    ReportClass rc = new ReportClass(); 
    rc.FileName = Server.MapPath("/Reports/rpt_DailyCustomerVisitSummary.rpt"); 
    rc.Load(); 
    rc.SetDataSource(dt); 
    Stream stream = rc.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); 
    return File(stream, "application/pdf"); 
} 

Hallo ich habe zwei Felder aus meiner Sicht, wenn ich das Von-Datum und bis Datum und klicken Sie auf die OK-Taste, es muss wählen um diese beiden Daten an den Controller zu übergeben, der hier ist

public ActionResult GetDates(string FromDate, string ToDate) 

Ist es möglich? Mit Ajax ist es möglich, aber ich will das nicht. Ich möchte diese Parameter an den Controller übergeben, ohne Ajax zu verwenden. bitte irgendjemand sagt mir die Lösung.

Voraus Dank ..

+2

'@ Html.BeginForm() {// Ihr hier View-Code}'? – Izzy

+0

dann was ich tun muss lzzy den Wert an den Controller übergeben – Susan

Antwort

1

Einrichten eines Formulars Sie sollten in der Lage sein, die Parameter an Ihren Controller zu übergeben.

Auch da es scheint, dass Sie ein Modell verwenden, können Sie das Modell stattdessen an den Controller zurückgeben. Stellen Sie außerdem sicher, dass die [HttpPost] -Datenanmerkung so eingestellt ist, dass sie angibt, dass Daten für die Buchung verwendet werden sollen.

[HttpPost]  
public ActionResult GetDates(YourModel yourModel) 
{ 
    var from = yourModel.FromDate; 
    var to = yourModel.ToDate; 
} 
0

Sie sollten nur eine <form> Schaffung betrachten um Ihre Inhalte zu wickeln und sie einfach auf den Server veröffentlichen eine traditionelle Form Vorlage verwendet wird. Dies ist im Allgemeinen die üblichste Art, mit der diese Art von Verhalten behandelt wird.

Sie würden also nur die Inhalte in Ihrer View wickeln müssen entweder mit einem nackten Knochen <form> Element, das auf Ihre spezifischen URL verweist (in diesem Fall ist es aufgelöst wird mit dem Url.Action() Methode:

<form action='@Url.Action("GetDates","YourController")'> 
    @Html.LabelFor(model => model.FromDate) 
    @Html.TextBoxFor(model => model.FromDate, new { @class = "form-control", type = "text" }) 
    @Html.LabelFor(model => model.ToDate) 
    @Html.TextBoxFor(model => model.ToDate, new { @class = "form-control", type = "text" }) 
    <input id="Button1" type="submit" value="Ok" /> 
</form> 

Da Sie sind MVC verwenden, können Sie auch mit den Html.BeginForm() Helfern betrachten als auch, was im wesentlichen das gleiche zu tun.

Dann wird nur sicherstellen, dass der Controller in Aktion mit einem [HttpPost]-Attribute versehen, so dass es tatsächlich POST r akzeptieren equests:

[HttpPost] 
public ActionResult GetDates(string FromDate, string ToDate) 
{ 
    // Omitted for brevity 
} 

Zusätzlich werden, da Sie bereits Ihre Ansicht zu einem Modell zu binden, können Sie tatsächlich Ihre Parameter Ihrer GetDates() Methode ändern, um eine Instanz des Modells (die von .NET Modell verbindlich bevölkert wird) zu erwarten :

[HttpPost] 
public ActionResult GetDates(YourModel model) 
{ 
    // Omitted for brevity (you can access your properties using 
    // Model.FromDate and Model.ToDate respectively here 
} 
0

Verwenden Sie eine der Methoden FormExtensions.BeginForm. Im einfachsten Fall:

@using (Html.BeginForm("GetDates", "YourController")) 
{ 
    @Html.LabelFor(model => model.FromDate) 
    @Html.TextBoxFor(model => model.FromDate, new { @class = "form-control", type = "text" }) 

    @Html.LabelFor(model => model.ToDate) 
    @Html.TextBoxFor(model => model.ToDate, new { @class = "form-control", type = "text" }) 

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

Die Begin Methode macht eine Form, die durch eine Controller-Aktion-Methode behandelt werden.

Sie können diese Methode in einem Verwendungsblock verwenden.In diesem Fall rendert die Methode das abschließende </form> Tag am Ende des Verwendungsblocks.

Sie können statt separatedProperties Objekt ganze Modell passieren:

[HttpPost] 
public ActionResult GetDates(YourModelClass model) 
{ 
    ... 
} 
Verwandte Themen