1

郵便番号のフィールドがあります。その人がこのフィールドに郵便番号を入力して別のフィールドをクリックすると、イベント(onBlur)がトリガーされるようにしたいと思います。このイベントはデータベースでselectを実行し、アドレスを取得して他のフィールドにこの情報を入力します。ビューからコントローラーメソッドを実行するのは良い考えではないことを読みました。では、どうすればこれを開発できますか?

私の郵便番号フィールド:

<div class="editor-field">
    @Html.Label("ZIP CODE")
    @Html.Editor("zipCodeClient")
</div>

ありがとう!

4

1 に答える 1

1

jQueryにアクセスできる場合は、ajax関数を使用して、関連するアドレス情報をJSON形式で返すwcfWebサービスを呼び出します。それ以外の場合は、独自のXHRリクエストを作成し、レスポンスを解析することができます。

$('#zipCodeClient').blur(function() {
    var zipCode = $(this).val();
    if(zipCode.length >= 5 && zipCode.length <= 10) {
        $.ajax({
            type: 'GET',
            data: { ZipCode: zipCode },
            url: 'something/ZipCodeToAddressService',
            dataType: 'json',
            contentType:  'application/json; charset=utf-8',
            success: function(data) {
               var responseObject = jQuery.parseJSON(data);
               $('#cityTextBox').val(responseObject.City);
               $('#stateTextBox').val(responseObject.State);
            }
        });
    }
    else {
        // zip code not valid
    }
});

WCFの場合:

[ServiceContract()]
public interface IAddressServices
{
    [OperationContract()]
    [WebGet(ResponseFormat = WebMessageFormat.Json)]
    string ZipCodeToAddressService(string ZipCode);
}

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
public class AddressServices : IAddressServices
{
    public string ZipCodeToAddressService(string ZipCode)
    {
        using (SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DB"].ConnectionString))
        {
            using (SqlCommand sqlCmd = new SqlCommand("ZipCodeToAddressStoredProc", sqlConnection))
            {
                sqlCmd.CommandType = CommandType.StoredProcedure;
                sqlCmd.Parameters.Add("@Zip", SqlDbType.NVarChar).Value = ZipCode;
                sqlConnection.Open();
                SqlDataReader sDR = sqlCmd.ExecuteReader(CommandBehavior.CloseConnection);
                DataTable tbl = new DataTable();
                tbl.Load(sDR);
                sDR.Close();
                var citystateData = from DataRow Row in tbl.AsEnumerable()
                                   select new
                                   {
                                      City = Row.Field<string>("City"),
                                      State = Row.Field<string>("State")
                                   };
                JavaScriptSerializer js = new JavaScriptSerializer();
                StringBuilder sb = new StringBuilder();
                js.Serialize(cityStateData, sb);
                string rtrnCityStateData = sb.ToString();
                return rtrnCityStateData;
            }
        }
    }
}
于 2012-08-01T14:42:12.300 に答える