如何在异步控制器中验证模型状态

| 我正在尝试使用异步控制器,但无法弄清楚如何验证用户输入。 以下是控制器中定义的两个异步方法。我应该在SearchAsync方法还是SearchCompleted方法中检查ModelState.IsValid。如果使用SearchAsync,则由于其返回类型为空,如何返回视图结果。如果使用SearchCompleted,则该方法将如何知道searchForm参数。
[HttpPost]
[ValidateAntiForgeryToken]
public void SearchAsync(BusinessSearchForm searchForm)
{
    AsyncManager.OutstandingOperations.Increment();
    new Thread(() =>
    {
        var suggestions = _searchSvc.GetSuggestions(searchForm.BusinessName, searchForm.StreetAddress, searchForm.City, searchForm.PostalCode);
        AsyncManager.Parameters[\"suggestions\"] = suggestions;                   
        AsyncManager.OutstandingOperations.Decrement();
    }).Start();
}

public ActionResult SearchCompleted(IEnumerable<BusinessSuggestionBase> suggestions)
{
    return View(suggestions);
}
    
已邀请:
以下内容似乎对我有用。我最终检查了这两种方法中的modelstate。将初始模型作为参数添加到完成的方法中。 Asp.net Mvc似乎在两种方法之间保持了模型状态
    [HttpPost]
    [ValidateAntiForgeryToken]
    public void SearchAsync(BusinessSearchForm searchForm)
    {
        if (ModelState.IsValid)
        {
            AsyncManager.OutstandingOperations.Increment();
            new Thread(() =>
            {
                if (ModelState.IsValid)
                {
                    var suggestions = _searchBusinessSvc.GetSuggestions(searchForm.BusinessName, searchForm.StreetAddress, searchForm.City, searchForm.PostalCode);
                    AsyncManager.Parameters[\"suggestions\"] = suggestions;
                }
                AsyncManager.Parameters[\"searchForm\"] = searchForm;
                AsyncManager.OutstandingOperations.Decrement();
            }).Start();             
        }
    }

    public ActionResult SearchCompleted(BusinessSearchForm searchForm,IEnumerable<BusinessSuggestionBase> suggestions)
    {
        if (ModelState.IsValid)
        {
            TempData[\"suggestions\"] = suggestions;
            return RedirectToAction(\"SearchResult\");
        }
        return View(searchForm);
    }
    
您可以使用
AsyncManager.Parameters[\'ModelIsValid\'] = false;
在Async方法中
if(AsyncManager.Parameters[\'ModelIsValid\'] == false) { ... }
在Completed方法中检查并查看是否存在验证问题。只是不要增加未完成的操作,并且不执行任何进一步的逻辑。将触发Completed方法,您可以检查该值。     

要回复问题请先登录注册