ASP.NET MVC и JQuery получает информацию к контроллеру

from ibapi.client import EClient
from ibapi.wrapper import EWrapper


class MyWrapper(EWrapper):

    def nextValidId(self, orderId:int):
        print("setting nextValidOrderId: %d", orderId)
        self.nextValidOrderId = orderId
        # start program here or use threading
        app.reqContractDetails(4444, contract)

    def contractDetails(self, reqId, contractDetails):
        print(reqId, contractDetails.contract)# my version doesnt use summary

    def contractDetailsEnd(self, reqId):
        print("ContractDetailsEnd. ", reqId)
        # this is the logical end of your program
        app.disconnect() # delete if threading and you want to stay connected

    def error(self, reqId, errorCode, errorString):
        print("Error. Id: " , reqId, " Code: " , errorCode , " Msg: " , errorString)


wrapper = MyWrapper()
app = EClient(wrapper)
app.connect("127.0.0.1", 7497, clientId=123)
print("serverVersion:%s connectionTime:%s" % (app.serverVersion(), app.twsConnectionTime()))

from ibapi.contract import Contract
contract = Contract()
contract.symbol = "XAUUSD"
contract.secType = "CMDTY"
contract.exchange = "SMART"
contract.currency = "USD"

app.run() # delete this line if threading

# def runMe():
#     app.run()

# import threading
# thread = threading.Thread(target = runMe)
# thread.start()

# input('enter to disconnect')
# app.disconnect()

Вы запрашиваете данные, прежде чем запустить программу чтения сообщений. Может быть, вы получите данные до его начала.

IB рекомендует запускать программу после получения nextValidId, чтобы вы знали, что все работает правильно. Поскольку Python API блокирует в цикле чтения сообщений, вам необходимо реализовать многопоточность или структурировать вашу программу для асинхронного запуска.

Я показал, как это сделать, чтобы он просто работал без ввода данных пользователем и управлялся событиями или был асинхронным. Это означает, что программа ждет, пока она должна что-то сделать, а затем она это делает.

Я включил параметр потоков, просто измените комментарии.

ContractDetails.summary был изменен на контракт. Я не уверен, что это когда-либо было обобщением в python, не знаю, откуда вы это взяли.

6
задан tereško 13 July 2012 в 08:27
поделиться

4 ответа

Это имеет отношение к способу, которым Вы структурируете свой запрос. Ваш вызов JQuery отправляет данные в действие AddLink с Пользовательским контроллером как данные POST, что означает в Вашем коде C#, Вы получите доступ к нему через Запрос. Объект формы. С тем, что Вы пытаетесь сделать, Вы структурировали бы URL jQuery как

/User/AddLink/{Title}/{URL}

Это потребовало бы, чтобы Вы записали правило в своем Глобальном. Файл ASAX, который обработал такой вход. Короче говоря, если Вы просто изменяете свой метод AddLink следующим образом:

public ActionResult AddLink()
{
    return Json(new { Result = string.Format(Request.Form["title"] + " " + Request.Form["url"])});
}

Я полагаю, что Вы получите ответ, который Вы ищете.

3
ответ дан 17 December 2019 в 00:15
поделиться

Вы попытались выписать полный URL? У меня был проект, работающий на моем локальном IIS, который имел ту же проблему. Полным URL был http://localhost/myproject/user/addlink, но использующий "/user/addlink" в jQuery ajax вызов отправлял http://localhost/user/addlink (заметьте, что "myproject" отсутствует, потому что это не на самом деле базовый URL насколько jQuery знает).

1
ответ дан 17 December 2019 в 00:15
поделиться

Вы попытались использовать jQuery.post метод, должно быть что-то как

jQuery.post("/User/AddLink",AjaxLink,function(data,textStatus)
{
  if(textStatus=="success")
  {
    //do something with data which is the result from the call}
  }
  else
  {
  //failed somewhere along the line
  }
},"json");

значения сообщения отображаются на параметрах в вызове MVC, таким образом, код foxxtrot должен быть ненужным.

0
ответ дан 17 December 2019 в 00:15
поделиться

Используйте инструмент, такой как поджигатель, чтобы удостовериться, что URL, который Вы ожидаете, называют.

Отладочная программа =>

  1. Используйте Firbug, чтобы решить, что корректный URL называют, и корректные данные отправляются в сообщении
  2. Повредите вызов в действии и удостоверьтесь, что параметры заполняются правильно
  3. Используйте Firebug снова для проверки ответа

Панель инструментов разработчика IE может также использоваться вместо Firebug, если Вы предпочитаете IE. если URL вызова и данные сообщения кажутся корректными, и действие не называют, необходимо проверить правила маршрутизации. т.е. это имеет какие-либо значения по умолчанию, в этом случае, платформа MVC будет искать сигнатуру метода, которая содержит те значения по умолчанию (Вы имеете {идентификатор} в Вашем правиле URL?)

1
ответ дан 17 December 2019 в 00:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: