2012-10-18 5 views
9

Hier bin ich den Wert aus der Datenbank zu holen und es in einem EingabefeldWie übermittele ich einen Textbox-Wert von einem MVC 4-Controller?

<input type="text" id="ss" value="@item.Quantity"/> 

und der Wert aus der Datenbank holen zeigt ist 1 .Dann i das Eingabefeld Wert am Wechsel zu 2 und Leiten Sie diesen Wert auf die Controller in einer Aktion klicken

<a id="imgUpdate" href="@Url.Action("Update", "Shopping", new { id = Request.QueryString["UserID"], productid = item.ProductID, qty = item.Quantity, unitrate = item.Rate })"> 

Aber im Controller Teil ich bin immer, dass old value 1 für qty .Aber ich brauche, dass updated value 2 in qty

public ActionResult Update(string id, string productid, int qty, decimal unitrate) 
     { 
      if (ModelState.IsValid) 
      { 
       int _records = UpdatePrice(id,productid,qty,unitrate); 
       if (_records > 0) 
       { 
        return RedirectToAction("Index1", "Shopping"); 
       } 
       else 
       { 
        ModelState.AddModelError("","Can Not Update"); 
       } 
      } 
      return View("Index1"); 
     } 

Irgendwelche Vorschläge?

EDIT:

 @using (Html.BeginForm("Update", "Shopping", FormMethod.Post)) 
    { 

       @Html.Hidden("id", @Request.QueryString["UserID"] as string) 
       @Html.Hidden("productid", item.ProductID as string) 
       @Html.TextBox("qty", item.Quantity) 
       @Html.Hidden("unitrate", item.Rate) 

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

Antwort

2

Ihr Link erzeugt wird, wenn die Seite Lasten deshalb wird es immer den ursprünglichen Wert in ihm. Sie den Link über Javascript

Sie können auch wickeln, dass nur in einer Form festlegen müssen und haben versteckte Felder für id, productid und unitrate

Hier ist ein sample für ya.

HTML

<input type="text" id="ss" value="1"/> 
<br/> 
<input type="submit" id="go" onClick="changeUrl()"/> 
<br/> 
<a id="imgUpdate" href="/someurl?quantity=1">click me</a> 

JS

function changeUrl(){ 
    var url = document.getElementById("imgUpdate").getAttribute('href'); 
    var inputValue = document.getElementById('ss').value; 
    var currentQ = GiveMeTheQueryStringParameterValue("quantity",url); 
    url = url.replace("quantity=" + currentQ, "quantity=" + inputValue); 
document.getElementById("imgUpdate").setAttribute('href',url) 
} 

    function GiveMeTheQueryStringParameterValue(parameterName, input) { 
    parameterName = parameterName.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); 
    var regex = new RegExp("[\\?&]" + parameterName + "=([^&#]*)"); 
    var results = regex.exec(input); 
    if (results == null) 
     return ""; 
    else 
     return decodeURIComponent(results[1].replace(/\+/g, " ")); 
} 

diese auf- und ausgebaut werden gereinigt könnten, wie Sie es brauchen, aber das Beispiel funktioniert

+0

beliebig ändern. – bala3569

+0

verwendest du jquery? – Eonasdan

+0

verwende keine jquery..is gibt es keine andere Möglichkeit, ohne jquery ?? wie asp.net webforms – bala3569

8

Sie einfache Form verwenden:

@using(Html.BeginForm("Update", "Shopping")) 
{ 
    <input type="text" id="ss" name="qty" value="@item.Quantity"/> 
    ... 
    <input type="submit" value="Update" /> 
} 

Und fügen Sie hier Attribut:

[HttpPost] 
public ActionResult Update(string id, string productid, int qty, decimal unitrate) 
+0

versucht, wie dies .. while klickt Eingangstyp Update es ist nicht in die Update-Aktion verschieben .. Beantwortete einen Haltepunkt und prüfte es .. Was ist das Problem hier ?? – bala3569

+0

es gibt keine separate Ansicht für Update .. – bala3569

+0

@ bala3569 Irgendwelche Fehler? – webdeveloper

3

Wenn Sie neue Informationen, um Ihre Anwendung zu übergeben wollen, müssen Sie POST Formular verwenden. In Razor können Sie die folgende

Code anzeigen verwenden:

@* By default BeginForm use FormMethod.Post *@ 
@using(Html.BeginForm("Update")){ 
    @Html.Hidden("id", Model.Id) 
    @Html.Hidden("productid", Model.ProductId) 
    @Html.TextBox("qty", Model.Quantity) 
    @Html.TextBox("unitrate", Model.UnitRate) 
    <input type="submit" value="Update" /> 
} 

Kontrolleurs Aktionen

[HttpGet] 
public ActionResult Update(){ 
    //[...] retrive your record object 
    return View(objRecord); 
} 

[HttpPost] 
public ActionResult Update(string id, string productid, int qty, decimal unitrate) 
{ 
     if (ModelState.IsValid){ 
      int _records = UpdatePrice(id,productid,qty,unitrate); 
      if (_records > 0){     { 
       return RedirectToAction("Index1", "Shopping"); 
      }else{     
       ModelState.AddModelError("","Can Not Update"); 
      } 
     } 
     return View("Index1"); 
} 

anzumerken, dass alternativ, wenn Sie @Html.TextBoxFor(model => model.Quantity) verwenden möchten, können Sie entweder einen Eingang mit dem Namen (respectecting case) "Quantity" oder Sie können Ihre POST Update() ändern, um einen Objektparameter zu erhalten, der die gleiche ty wäre pe als Ihre streng typisierte Ansicht.Hier ein Beispiel:

Modell

public class Record { 
    public string Id { get; set; } 
    public string ProductId { get; set; } 
    public string Quantity { get; set; } 
    public decimal UnitRate { get; set; } 
} 

Ansicht

@using(Html.BeginForm("Update")){ 
    @Html.HiddenFor(model => model.Id) 
    @Html.HiddenFor(model => model.ProductId) 
    @Html.TextBoxFor(model=> model.Quantity) 
    @Html.TextBoxFor(model => model.UnitRate) 
    <input type="submit" value="Update" /> 
} 

Beitrag Aktion

[HttpPost] 
public ActionResult Update(Record rec){ //Alternatively you can also use FormCollection object as well 
    if(TryValidateModel(rec)){ 
     //update code 
    } 
    return View("Index1"); 
} 
+0

versucht, wie dies ... while Klicken Eingabe-Typ Update es bewegt sich nicht in die Update-Aktion .. Beantwortete einen Haltepunkt und überprüft es .. was ist das Problem hier ?? – bala3569

+0

gibt es keine separate Ansicht für Update .. – bala3569

+0

@ Bala3569 in der Regel haben Sie zwei Aktionen, einen POST und einen bekommen, wird GET zurück (bekommen) die Ansicht und POST wird Ihre Daten speichern. Ich werde meine Antwort aktualisieren –

0

Ich werde versuchen, nur ein nswer die Frage, aber meine Beispiele sind sehr einfach, weil ich neu bei mvc bin. Hoffe, das hilft jemandem.

[HttpPost] ///This function is in my controller class 
    public ActionResult Delete(string txtDelete) 
    { 
     int _id = Convert.ToInt32(txtDelete); // put your code   
    } 

Dieser Code ist in cshtml mein Controller

> @using (Html.BeginForm("Delete", "LibraryManagement")) 
{ 
<button>Delete</button> 
@Html.Label("Enter an ID number"); 
@Html.TextBox("txtDelete") } 

sicher stellen Sie die Textbox Name und Funktion Eingabe Ihres Controller sind die gleichen Namen und Typ (string) .Diese Art und Weise, Ihre Funktion die Textbox erhalten Eingang.

1

Versuchen Sie Folgendes in Ihrer Sicht, um die Ausgabe von jedem zu überprüfen. Der erste wird aktualisiert, wenn die Ansicht ein zweites Mal aufgerufen wird. Mein Controller verwendet den Schlüssel ShowCreateButton und hat den optionalen Parameter _createAction mit einem Standardwert - Sie können dies zu Ihrem Schlüssel/Parameter

Verwandte Themen