我正在尝试在ASP.NET MVC中创建注册页面,但特别是有一个字段存在问题。 "国家"字段,我的目的是从本地存储的JSON文件中读取国家并呈现局部视图(仅包含下拉框)。但是,当我运行代码并尝试导航到注册页面时,我收到以下错误消息:
类型' System.Web.HttpException'的例外情况发生在System.Web.dll中但未在用户代码中处理
其他信息:执行子请求失败。请查看InnerException以获取更多信息。
仔细观察异常,我看到以下内容:
$ exception {"执行子请求失败。请查看InnerException以获取更多信息。"} System.Web.HttpException
InnerException {"路径控制器' /帐户/注册'未找到或未实现IController。"} System.Exception {System.Web.HttpException}
以下是代码:
部分视图
using MyWatch.Models;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MyWatch.Controllers
{
public class CountrySearchController : Controller
{
[HttpGet]
[ChildActionOnly]
public ActionResult CountrySearch()
{
try
{
using (StreamReader streamReader = new StreamReader("C:\\Users\\Alex Combe\\Documents\\Visual Studio 2015\\Projects\\MyWatch\\MyWatch\\App_Data\\CountryList.json"))
{
string json = streamReader.ReadToEnd();
Countries countries = new Countries();
countries.countries = JsonConvert.DeserializeObject<IList<Country>>(json);
return PartialView(countries);
}
}
catch (FileNotFoundException e)
{
Console.WriteLine(e.StackTrace);
return View(new Countries());
}
}
}
}
主视图
<div class="form-group">
@Html.LabelFor(m => m.Country, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@*@{Html.RenderAction("CountrySearch", "Search");}*@
@{Html.RenderAction("CountrySearch", "Search");}
</div>
</div>
部分视图控制器
namespace MyWatch.Controllers
{
public class CountrySearchController : Controller
{
[HttpGet]
[ChildActionOnly]
public ActionResult CountrySearch()
{
try
{
using (StreamReader streamReader = new StreamReader("C:\\Users\\Alex Combe\\Documents\\Visual Studio 2015\\Projects\\MyWatch\\MyWatch\\App_Data\\CountryList.json"))
{
string json = streamReader.ReadToEnd();
Countries countries = new Countries();
countries.countries = JsonConvert.DeserializeObject<IList<Country>>(json);
return PartialView(countries);
}
}
catch (FileNotFoundException e)
{
Console.WriteLine(e.StackTrace);
return View(new Countries());
}
}
}
}
部分视图模型
namespace MyWatch.Models
{
public class Country
{
public string name { get; set; }
public string code { get; set; }
}
public class Countries
{
public string SelectedItem { get; set; }
public IList<Country> countries;
}
}
答案 0 :(得分:1)
此处的问题是在主视图中调用Html.RenderAction
。查看MSDN documentation for RenderAction,我们希望我们传递ActionMethod
名称和Controller
名称:
public static void RenderAction(
this HtmlHelper htmlHelper,
string actionName,
string controllerName = null,
object routeValues = null
)
如上所述,您的RenderAction
调用正在为controllerName
参数传递“搜索”,但您的控制器名称为CountrySearch,导致路由失败并出现此异常。
有两种方法可以解决此问题,但最简单的方法是更新RenderAction
来调用正确的Controller
名称,如下所示:
@{Html.RenderAction("CountrySearch", "CountrySearch");}
答案 1 :(得分:0)
尝试删除[HttpGet]。根据这篇文章Link。 [HttpGet]只允许获取请求,但如果有帖子请求,则无法找到该方法。