2012-10-18 9 views
9

jestem tutaj pobierania wartości z bazy danych i pokazywanie go w polu wejściowymJak przekazać wartość pola tekstowego z widoku do kontrolera w MVC 4?

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

a wartość pobierania z bazy danych jest 1 .Następnie jestem zmieniając wartość pola wejściowego do 2 i przechodząc tę ​​wartość do kontroler w akcji kliknij

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

Ale w części kontrolera Dostaję że old value 1 do qty .Ale muszę że updated value 2 w 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"); 
     } 

Jakieś sugestie?

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

Odpowiedz

2

link jest generowany, gdy strona ładunki dlatego zawsze będzie mieć wartość początkową w nim. trzeba będzie ustawić link poprzez javascript

Można też po prostu zawinąć które w formie i mają ukryte pola do id, productid i unitrate

Oto sample dla ciebie.

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

może to być czyszczone i rozbudowany, jak trzeba go jednak przykład działa

+0

każdej próbce ... ?? – bala3569

+0

używasz jquery? – Eonasdan

+0

nie używam jquery .. jest tam jakikolwiek inny sposób bez jquery? Jak webforms asp.net – bala3569

8

Można użyć prostego formularza:

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

I tu dodać atrybut:

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

próbował tak .. tymczasem kliknięcie aktualizacji typu wejścia nie porusza się w akcji aktualizacji .. Zatrzymałem punkt przerwania i sprawdziłem .. Jaki jest tutaj problem?? – bala3569

+0

nie ma osobnego widoku aktualizacji. – bala3569

+0

@ bala3569 Jakikolwiek błąd? – webdeveloper

3

Jeżeli chcesz przekazać nowe informacje do aplikacji, należy użyć formularza POST. W Razor można użyć następującego

View Code:

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

działania regulatora

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

pamiętać, że alternatywnie, jeśli chcesz używać @Html.TextBoxFor(model => model.Quantity) można albo mieć wejście z nazwą (szacunkiem) "Quantity" lub możesz zmienić aktualizację POST(), aby otrzymać parametr obiektu, który byłby taki sam pe jako twój ściśle wpisany widok.Oto przykład:

model

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

Zobacz

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

post Action

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

próbowałem jak to. Kliknięcie aktualizacji typu wejściowego nie jest przenoszone do akcji aktualizacji. Zatrzymałem punkt przerwania i sprawdziłem. Jaki jest problem? – bala3569

+0

nie ma osobnego widoku aktualizacji. – bala3569

+0

@ bala3569 zwykle masz dwie akcje, jedną POST i jedną otrzymasz, GET zwróci (otrzymasz) widok, a POST zapisze twoje dane. Zaktualizuję moją odpowiedź: –

0

Ja po prostu staram się nswer pytanie, ale moje przykłady bardzo proste, ponieważ jestem nowy w mvc. Mam nadzieję, że to pomoże komuś.

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

Ten kod jest w cshtml mojego sterownika

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

Wystarczy upewnić się, że nazwa tekstowe i wejście funkcja kontrolera są takie same imię i typ (string) .W ten sposób, czynność uzyskać tekstowe wkład.

1

Spróbuj wykonać następujące czynności, aby sprawdzić wynik każdego z nich. Pierwszy aktualizuje się, gdy widok jest wywoływany po raz drugi. Mój kontroler wykorzystuje klucz ShowCreateButton i ma opcjonalną _createAction parametru o wartości domyślnej - można zmienić na swojej kluczowej/parametr

@Html.TextBox("_createAction", null, new { Value = (string)ViewBag.ShowCreateButton }) 
@Html.TextBox("_createAction", ViewBag.ShowCreateButton) 
@ViewBag.ShowCreateButton 
Powiązane problemy