0

ラベルにこれと同じJavaScriptを使用しているので、送信フィールドで何が間違っているのかわかりません。

これが私の見解です:

@model SuburbanCustPortal.Models.OrderGasModel

<script src="http://code.jquery.com/jquery-1.8.3.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>

<script>   
    $(function () {
    $("#datepicker").datepicker();   }); 
</script>

<script> 
    $(function(){   
        $("#AccountId").change(function(){
            var val=$(this).val();
            $("#contactNumber").load("@Url.Action("GetMyValue","GasOrder")", { custid : val });
            document.forms[0].Amount.focus();   }); }); 
</script>

@{
    ViewBag.Title = "Order Gas"; }

<h2>Order Gas</h2>

        @using (Html.BeginForm("OrderGasSuccess", "GasOrder", FormMethod.Post))
        {
            @Html.ValidationSummary(true, "Submit was unsuccessful. Please correct the errors and try again.")

            <div>
                <fieldset>
                    <legend>Account Information - all fields required</legend>

                    <div class="editor-label">
                        @Html.LabelFor(m => m.AccountNumber)
                    </div>
                    <div class="editor-field">
                        @Html.DropDownListFor(x => x.AccountId, (IEnumerable<SelectListItem>)ViewBag.Accounts)
                    </div>

                  <div class="editor-label">
                        @Html.LabelFor(m => m.TankPercent)
                    </div>
                    <div class="editor-field">
                        @Html.TextBoxFor(m => m.TankPercent, new { @class = "GenericTextBox" })
                        @Html.ValidationMessageFor(m => m.TankPercent)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(m => m.Amount)
                    </div>
                    <div class="editor-field">
                        @Html.TextBoxFor(m => m.Amount, new { @class = "GenericTextBox" })
                        @Html.ValidationMessageFor(m => m.Amount)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(m => m.DateRequested)
                    </div>
                    <div class="editor-field">
                      <input type="text" id="datepicker" class="GenericTextBox"/>
                      @Html.ValidationMessageFor(m => m.DateRequested)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(m => m.ContactNumber)
                    </div>
                  <div class="editor-field">
                    <input type="text" id="contactNumber" class="GenericTextBox"/>

                    @Html.ValidationMessageFor(m => m.ContactNumber)
                  </div>


                  <div class="editor-label">
                        @Html.LabelFor(m => m.Message)
                    </div>
                    <div class="editor-field">
                        @Html.EditorFor(x => x.Message)            
                    </div>

                    <div>
                        <input type="submit" value="Submit" />
                    </div>

                </fieldset>

            </div>
        }

呼び出されている私のメソッド:

public string GetMyValue(string custid)
{
  var cust = _client.GetCustomerByCustomerId(Guid.Parse(custid));
  return String.Format("{0:C}", Decimal.Parse(cust.TotalBalance));
}

GetMyValueメソッドが呼び出され、値が返されます。ドロップダウンリストにも値が入力されています。

ddlの値を変更すると、GetMyValueは起動しますが、入力ボックスは値を取得しません。

誰かが私が間違っているのを見ますか?

====更新====

以下のように変更しました。このメッセージが表示されたので、正しく実行したかどうかはわかりません。

Microsoft JScriptランタイムエラー:「val」は未定義です

これが私の見解です。

@model SuburbanCustPortal.Models.OrderGasModel

<script src="http://code.jquery.com/jquery-1.8.3.js"></script>
<script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>

<script>
  $(function () {
    $("#datepicker").datepicker();
  });
</script>

<script>
    $.post("@Url.Action("GetMyValue","GasOrder")",  { custid : val }, function(r){
        $("#contactNumber").val(r.ContactNumber);
    });
</script>

@{
    ViewBag.Title = "Order Gas";
}

<h2>Order Gas</h2>

        @using (Html.BeginForm("OrderGasSuccess", "GasOrder", FormMethod.Post))
        {
            @Html.ValidationSummary(true, "Submit was unsuccessful. Please correct the errors and try again.")

            <div>
                <fieldset>
                    <legend>Account Information - all fields required</legend>

                    <div class="editor-label">
                        @Html.LabelFor(m => m.AccountNumber)
                    </div>
                    <div class="editor-field">
                        @Html.DropDownListFor(x => x.AccountId, (IEnumerable<SelectListItem>)ViewBag.Accounts)
                    </div>

                  <div class="editor-label">
                        @Html.LabelFor(m => m.TankPercent)
                    </div>
                    <div class="editor-field">
                        @Html.TextBoxFor(m => m.TankPercent, new { @class = "GenericTextBox" })
                        @Html.ValidationMessageFor(m => m.TankPercent)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(m => m.Amount)
                    </div>
                    <div class="editor-field">
                        @Html.TextBoxFor(m => m.Amount, new { @class = "GenericTextBox" })
                        @Html.ValidationMessageFor(m => m.Amount)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(m => m.DateRequested)
                    </div>
                    <div class="editor-field">
                      <input type="text" id="datepicker" class="GenericTextBox"/>
                      @Html.ValidationMessageFor(m => m.DateRequested)
                    </div>

                    <div class="editor-label">
                        @Html.LabelFor(m => m.ContactNumber)
                    </div>
                  <div class="editor-field">
                    <input type="text" id="contactNumber" class="GenericTextBox"/>

                    @Html.ValidationMessageFor(m => m.ContactNumber)
                  </div>


                  <div class="editor-label">
                        @Html.LabelFor(m => m.Message)
                    </div>
                    <div class="editor-field">
                        @Html.EditorFor(x => x.Message)            
                    </div>

                    <div>
                        <input type="submit" value="Submit" />
                    </div>

                </fieldset>

            </div>
        }

私はjavascriptを初めて使用するので、これが些細な変更である場合はお詫び申し上げます。

4

2 に答える 2

0

コントローラ

[HttpPost]  
public ActionResult GetMyValue(string custid) 
{          
    var cust = _client.GetCustomerByCustomerId(Guid.Parse(custid));  
    return Json(String.Format("{0:C}", Decimal.Parse(cust.TotalBalance)), JsonRequestBehavior.AllowGet);
}

脚本

<script>
    $(document).ready(function() {
        $("#AccountId").change(function(){
            var val=$(this).val();
            $.ajax({
                url: '@Url.Action("GetMyValue","GasOrder")',
                type: 'POST',
                data: val,
                dataType: 'json',
                contentType: 'application/json; charset=utf-8',
                error: function (xhr) {
                    alert('Error: ' + xhr.statusText);
                },
                success: function (result) {
                    $("#contactNumber").val(result);
                }
           });
        });
    });
</script>
于 2012-12-07T15:35:08.747 に答える
0

.load関数は、「一致した要素のHTMLコンテンツを返されたデータに設定する」ためです(http://api.jquery.com/load/)。ただし、入力テキストを変更するには、value属性を変更する必要があります。この問題を修正するには、1)GetMyValueアクションからJSONを返す2).loadの代わりに.post(.getを使用するとキャッシュで問題が発生する可能性があります)を使用し、応答からコールバック設定値を成功させることができます。何かのようなもの

$.post("@Url.Action("GetMyValue","GasOrder")",  { custid : val }, function(r){
    $("#contactNumber").val(r.ContactNumber);
});
于 2012-12-06T22:54:54.783 に答える