wake-up-neo.net

Wie übergeben Sie einen Textfeldwert aus einer Sicht an eine Steuerung in MVC 4?

Hier rufe ich den Wert aus der Datenbank ab und zeige ihn in einem Eingabefeld

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

und der Wert, der von der Datenbank abgerufen wird, ist 1. Dann ändere ich den Eingabefeldwert in 2 und leite diesen Wert mit einem Klick an die Steuerung 

 <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 bekomme ich den old value1 für qty. Aber ich brauche den 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");
        }

Irgendein Vorschlag?

BEARBEITEN:

     @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" />
     }
9
bala3569

Sie können ein einfaches Formular 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 das Attribut hinzu:

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

Wenn Sie neue Informationen an Ihre Anwendung weitergeben möchten, müssen Sie das Formular POST verwenden. In Razor können Sie Folgendes verwenden

Code anzeigen:

@* 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" />
}

Aktionen des Controllers

[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");
 }

Wenn Sie @Html.TextBoxFor(model => model.Quantity) verwenden möchten, können Sie alternativ entweder eine Eingabe mit dem Namen (unter Beachtung der Groß-/Kleinschreibung) "Quantity" eingeben, oder Sie können POST Update () ändern, um einen Objektparameter zu erhalten, der dem gleichen Typ entspricht Ihre streng getippte Ansicht. Hier ist 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; }
}

Aussicht

@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" />
}

Nach Aktion

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

ihr Link wird generiert, wenn die Seite lädt. Daher wird immer der ursprüngliche Wert darin enthalten. Sie müssen den Link über Javascript setzen

Sie können das auch einfach in ein Formular einschließen und ausgeblendete Felder für id, productid und unitrate haben.

Hier ist eine Probe für dich.

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, " "));
}

dies kann bereinigt und erweitert werden, wenn Sie es brauchen, aber das Beispiel funktioniert

2
Eonasdan

Versuchen Sie Folgendes in Ihrer Ansicht, 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 diesen in Ihren Schlüssel/Parameter ändern

@Html.TextBox("_createAction", null, new { Value = (string)ViewBag.ShowCreateButton })
@Html.TextBox("_createAction", ViewBag.ShowCreateButton )
@ViewBag.ShowCreateButton
1

Ich werde einfach versuchen, die Frage zu beantworten, aber meine Beispiele sind sehr einfach, da ich bei mvc neu 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 befindet sich in der cshtml meines Controllers 

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

Stellen Sie einfach sicher, dass der Name des Textfelds und die Funktionseingabe Ihres Controllers mit demselben Namen und Typ (Zeichenfolge) übereinstimmen. Auf diese Weise erhält Ihre Funktion die Eingabe des Textfelds. 

0
sssD