2012-10-18 29 views
9

Eccomi recupero del valore dal database e mostrarlo in un campo di inputCome passare un valore della casella di testo dalla vista a un controller in MVC 4?

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

e il valore di recupero dal database è 1 .Poi Sto cambiando il valore del campo di input per 2 e passando tale valore al controllore in un'azione di click

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

Ma nella parte regolatore sto ottenendo che old value 1 per qty .Ma ho bisogno che 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"); 
     } 

Qualche suggerimento?

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

risposta

2

il tuo link è generato quando la pagina carichi quindi avrà sempre il valore originale in esso. Sarà necessario impostare il link via JavaScript

Si potrebbe anche solo avvolgere che in una forma e hai nascosto i campi per id, productid, e unitrate

Ecco un sample per te.

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

questo potrebbe essere ripulito e ampliato come è necessario, ma l'esempio funziona

+0

qualsiasi campione ... ?? – bala3569

+0

stai usando jquery? – Eonasdan

+0

non sto usando jquery..è lì in qualsiasi altro modo senza jquery ?? come webforms asp.net – bala3569

8

È possibile utilizzare forma semplice:

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

E aggiungere qui attribuiscono:

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

provato in questo modo. While facendo clic sul tipo di input update non si sta spostando nell'azione di aggiornamento..Kept un breakpoint e controllato .. qual è il problema qui ?? – bala3569

+0

non c'è una vista separata per l'aggiornamento .. – bala3569

+0

@ bala3569 Qualche errore? – webdeveloper

3

Quando si desidera passare le nuove informazioni alla vostra applicazione, è necessario utilizzare modulo POST. In rasoio è possibile utilizzare il seguente

Visualizza codice:

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

azioni di controller

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

Si noti che in alternativa, se si desidera utilizzare @Html.TextBoxFor(model => model.Quantity) è possibile avere un input con il nome (rispettando il caso) "Quantity" oppure puoi modificare il tuo POST Update() per ricevere un parametro oggetto, che sarebbe lo stesso ty pe come la tua vista tipizzata.Ecco un esempio:

Modello

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

View

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

Messaggio Azione

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

ha provato in questo modo .. mentre si fa clic sul tipo di aggiornamento, l'aggiornamento non si sta spostando nell'azione di aggiornamento .. Tenuto un punto di interruzione e controllato ... quale è il problema qui? – bala3569

+0

non c'è una vista separata per l'aggiornamento .. – bala3569

+0

@ bala3569 in genere si hanno due azioni, una POST e una ottiene, GET restituirà (ottenere) la vista e POST salverà i dati. Aggiornerò la mia risposta –

0

mi limiterò a cercare di un rispondi alla domanda ma i miei esempi sono molto semplici perché sono nuovo in mvc. Spero che questo aiuti qualcuno.

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

Questo codice è in cshtml di mio controller

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

Basta assicurarsi che il nome di testo e inserire la funzione del controller sono lo stesso nome e tipo (stringa) .Questo modo, la funzione ottenere la casella di testo ingresso.

1

Provare quanto segue per controllare l'output di ciascuno. Il primo si aggiorna quando la vista viene richiamata una seconda volta. Il mio controller usa la chiave ShowCreateButton e ha il parametro facoltativo _createAction con un valore predefinito - puoi cambiarlo con la chiave/parametro

Problemi correlati