12

ここでは、データベースから値を取得し、入力フィールドに表示しています

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

データベースからフェッチする値は1.次に、入力フィールドの値を変更2 し、アクションクリックでその値をコントローラーに渡します

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

しかし、コントローラー部分では、そのold value1を取得しています。しかし、私はqtyそれが必要updated value 2です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");
        }

なにか提案を?

編集:

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

5 に答える 5

11

簡単なフォームを使用できます:

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

ここに属性を追加します。

[HttpPost]
public ActionResult Update(string id, string productid, int qty, decimal unitrate)
于 2012-10-18T12:50:13.970 に答える
3

アプリケーションに新しい情報を渡したい場合は、POSTフォームを使用する必要があります。Razorでは、次を使用できます

コードを表示:

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

コントローラーのアクション

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

または、使用する@Html.TextBoxFor(model => model.Quantity)場合は、名前を入力するか(大文字と小文字を区別)"Quantity"、POST Update()を変更して、厳密に型指定されたビューと同じ型のオブジェクトパラメーターを受け取ることができます。次に例を示します。

モデル

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

意見

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

アクション後

[HttpPost]
public ActionResult Update(Record rec){ //Alternatively you can also use FormCollection object as well 
   if(TryValidateModel(rec)){
        //update code
   }
   return View("Index1");
}
于 2012-10-18T12:52:48.147 に答える
2

リンクはページの読み込み時に生成されるため、常に元の値が含まれています。JavaScriptを介してリンクを設定する必要があります

idそれをフォームにラップして、 、productid、および の非表示フィールドを作成することもできます。unitrate

これがあなたのためのサンプルです。

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

これは必要に応じてクリーンアップして拡張できますが、例は機能します

于 2012-10-18T12:37:37.517 に答える
1

ビューで次のことを試して、それぞれの出力を確認してください。ビューが 2 回目に呼び出されると、最初のビューが更新されます。私のコントローラーはキー ShowCreateButton を使用し、デフォルト値を持つオプションのパラメーター _createAction を持っています - これをキー/パラメーターに変更できます

@Html.TextBox("_createAction", null, new { Value = (string)ViewBag.ShowCreateButton })
@Html.TextBox("_createAction", ViewBag.ShowCreateButton )
@ViewBag.ShowCreateButton
于 2014-07-16T12:51:57.883 に答える