C# MVC将表单数据发布到主控制器中的异步任务

C# MVC将表单数据发布到主控制器中的异步任务,c#,asp.net-mvc,asynchronous,C#,Asp.net Mvc,Asynchronous,我是线程新手,我有一个异步任务,需要将视图数据发布到此任务 这就是我所处的位置,我的时间不多了: [HttpPost] [ValidateAntiForgeryToken] public ActionResult Pay(string amount, string cardExpirtyDate, string cardHolderName, string cardNumber) public async Task<ActionResult> PayAsync(FormCo

我是线程新手,我有一个异步任务,需要将视图数据发布到此任务

这就是我所处的位置,我的时间不多了:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Pay(string amount, string cardExpirtyDate, string cardHolderName, string cardNumber)

    public async Task<ActionResult> PayAsync(FormCollection form)
    {
        var amount = form["amount"].ToString();
        var cardExpirtyDate = form["cardExpirtyDate"].ToString();
        var cardHolderName = form["cardHolderName"].ToString();
        var cardNumber = "4111111111111111";
        var customerId = 23;//Internal purpose to track which customer made the transaction....
        var paymentService = new PaymentService(amount, cardExpirtyDate, cardHolderName, cardNumber, customerId.ToString());
        var transactionResult = await paymentService.PostAsync();
        if (transactionResult == null) return View();

        if (transactionResult.TransactionApproved && !transactionResult.TransactionError
                && transactionResult.CustomerRef == customerId.ToString())
        {
            //transaction success....Go to payment Response and send the variables

            TempData["TRANSACTION_STATUS"] = "APPROVED";
        }
        else
        {
            var message = transactionResult.Message;
        }
        return View();
    }
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Pay(字符串金额、字符串cardExpirtyDate、字符串持卡人姓名、字符串cardNumber)
公共异步任务PaySync(FormCollection表单)
{
var amount=形式[“amount”].ToString();
var cardExpirtyDate=form[“cardExpirtyDate”].ToString();
var CANDERNAME=表格[“CANDERNAME”]。ToString();
var cardname=“4111111111”;
var customerId=23;//用于跟踪进行交易的客户的内部用途。。。。
var paymentService=新的paymentService(金额、cardExpirtyDate、持卡人姓名、卡号、customerId.ToString());
var transactionResult=wait paymentService.PostAsync();
if(transactionResult==null)返回视图();
if(transactionResult.TransactionApproved&!transactionResult.TransactionError)
&&transactionResult.CustomerRef==customerId.ToString()
{
//交易成功…转到付款响应并发送变量
TempData[“交易状态”]=“已批准”;
}
其他的
{
var message=transactionResult.message;
}
返回视图();
}
它期待着一个;。我尝试在异步任务周围添加{},但也不起作用

观点:

@using (Html.BeginForm())
    {
    @Html.AntiForgeryToken()
    <div>
        Amount:    <input type="text" name="amount" /><br />
        Expirty:   <input type="text" name="cardExpirtyDate" /><br />
        Name:   <input type="text" name="cardHolderName" /><br />
        Number:   <input type="text" name="cardNumber" /><br />
    </div>
    <input type="submit" />


    }
@if (TempData["TRANSACTION_STATUS"] != null && TempData["TRANSACTION_STATUS"] == "APPROVED")
{
    <div class="alert alert-success">Your transaction has been processed successfully. Thank you.</div>
}
else
{

    {
        <div class="alert alert-danger">There is an issue with this transaction. Please try a different card.</div>
    }
}
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
金额:
到期日:
名称:
编号:
} @if(TempData[“事务处理状态”]!=null&&TempData[“事务处理状态”]=“已批准”) { 您的交易已成功处理。谢谢。 } 其他的 { { 此交易存在问题。请尝试其他卡。 } }
谢谢您的关注,
Doug

您有一个没有方法主体的方法头:

public ActionResult Pay(string amount, string cardExpirtyDate, string cardHolderName, string cardNumber)
为方法定义主体,或删除标题


在这种情况下,编译器错误可能并不明显,因为类中存在一个非常明显的结构错误。在这种情况下,编译器根本无法理解它。

在我看来,您试图在一个方法中创建一个方法

public ActionResult Pay(string amount, string cardExpirtyDate, string cardHolderName, string cardNumber) {
     public async Task<ActionResult> PayAsync(FormCollection form) {
            //... Your code ...
     }
}
public ActionResult Pay(字符串金额、字符串cardExpirtyDate、字符串持卡人姓名、字符串cardNumber){
公共异步任务PaySync(FormCollection表单){
//…你的代码。。。
}
}
你想在这里完成什么

您应该只有一种方法:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> PayAsync(FormCollection form) {
   // ... Your code...
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务PaySync(FormCollection表单){
//…你的代码。。。
}

这可能就是您试图实现的目标。只需使主请求异步,而不是让它尝试调用另一个请求

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult>  Pay(FormCollection form)
    var amount = form["amount"].ToString();
    var cardExpirtyDate = form["cardExpirtyDate"].ToString();
    var cardHolderName = form["cardHolderName"].ToString();
    var cardNumber = "4111111111111111";
    var customerId = 23;//Internal purpose to track which customer made the transaction....
    var paymentService = new PaymentService(amount, cardExpirtyDate, cardHolderName, cardNumber, customerId.ToString());
    var transactionResult = await paymentService.PostAsync();
    if (transactionResult == null) return View();

    if (transactionResult.TransactionApproved && !transactionResult.TransactionError
            && transactionResult.CustomerRef == customerId.ToString())
    {
        //transaction success....Go to payment Response and send the variables

        TempData["TRANSACTION_STATUS"] = "APPROVED";
    }
    else
    {
        var message = transactionResult.Message;
    }
    return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务支付(FormCollection form)
var amount=形式[“amount”].ToString();
var cardExpirtyDate=form[“cardExpirtyDate”].ToString();
var CANDERNAME=表格[“CANDERNAME”]。ToString();
var cardname=“4111111111”;
var customerId=23//跟踪哪位客户进行交易的内部目的。。。。
var paymentService=新的paymentService(金额、cardExpirtyDate、持卡人姓名、卡号、customerId.ToString());
var transactionResult=wait paymentService.PostAsync();
if(transactionResult==null)返回视图();
if(transactionResult.TransactionApproved&!transactionResult.TransactionError)
&&transactionResult.CustomerRef==customerId.ToString()
{
//交易成功…转到付款响应并发送变量
TempData[“交易状态”]=“已批准”;
}
其他的
{
var message=transactionResult.message;
}
返回视图();
}

你的问题是什么?这段代码以什么方式不工作?它不会编译。它需要一个分号;看起来您正在另一个方法中创建一个方法。你能解释一下你想在那里实现什么吗?将视图中的数据发布到pay。我可以从视图直接发布到PaySync吗?我试图在PaySync周围添加括号{},使其成为正文,但也不起作用。@DougFarrell:
PaySync
方法的正文周围已经有大括号了。乍一看,这种方法似乎很好。问题是你的另一种方法,
Pay
。您没有定义它。我可以从Pay视图直接发布到PaySync吗?谢谢您。我使用@using(Html.beginnform(“payancy”,“Home”)直接发布到payancy,虽然效果很好,但效果更好,因为我可以使用相同的视图。对不起,我的无知。