C#.NET MVC4 - 方法的非可空类型参数的null条目

时间:2013-11-12 22:29:53

标签: c# asp.net .net asp.net-mvc asp.net-mvc-4

在我的c#.net项目中,当我尝试启动onClick事件时,我收到此错误。我想我可能会错过一个重要的汇编参考,但无法弄清楚为什么会出现这个错误。直到最近,该项目工作正常,我所做的一些修改导致了这个问题

问题

  

应用程序中的服务器错误

     应用程序中的服务器错误。

参数字典包含方法'System.Web.Mvc.ActionResult索引(Double,Double,System.String,System.String,System)的非可空类型'System.Double'的参数'lat'的空条目'MyDisplayTracking.Controllers.HomeController'中的.String,System.String,System.String)'。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数

描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.ArgumentException:参数字典包含方法'System.Web.Mvc.ActionResult Index(Double,Double,System)的非可空类型'System.Double'的参数'lat'的空条目。 'MyDisplayTracking.Controllers.HomeController'中的String,System.String,System.String,System.String,System.String)'。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数

来源错误:

在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。

堆栈追踪:

[ArgumentException:参数字典包含非可空类型'System.Double'的参数'lat'的空条目,用于方法'System.Web.Mvc.ActionResult索引(Double,Double,System.String,System。 'MyDisplayTracking.Controllers.HomeController'中的String,System.String,System.String,System.String)'。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数]    System.Web.Mvc.ActionDescriptor.ExtractParameterFromDictionary(ParameterInfo parameterInfo,IDictionary 2 parameters, MethodInfo methodInfo) +664911 System.Web.Mvc.<>c__DisplayClass1.<Execute>b__0(ParameterInfo parameterInfo) +18 System.Linq.WhereSelectArrayIterator 2.MoveNext()+85    System.Linq.Buffer 1..ctor(IEnumerable 1来源)+217    System.Linq.Enumerable.ToArray(IEnumerable 1 source) +78 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary 2个参数)+133    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary 2 parameters) +27 System.Web.Mvc.Async.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() +28 System.Web.Mvc.Async.<>c__DisplayClass8 1.b__7(IAsyncResult _)+12    System.Web.Mvc.Async.WrappedAsyncResult 1.End() +57 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +50 System.Web.Mvc.Async.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() +58 System.Web.Mvc.Async.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() +237 System.Web.Mvc.Async.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) +12 System.Web.Mvc.Async.WrappedAsyncResult 1.End()+57    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult)+50    System.Web.Mvc.Async。&lt;&gt; c__DisplayClass2a.b__20()+24    System.Web.Mvc.Async。&lt;&gt; c__DisplayClass25.b__22(IAsyncResult asyncResult)+126    System.Web.Mvc.Async.WrappedAsyncResult 1.End() +57 System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +45 System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +14 System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +25 System.Web.Mvc.Async.WrappedAsyncResult 1.End()+62    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult)+61    System.Web.Mvc.Async。&lt;&gt; c__DisplayClass4.b__3(IAsyncResult ar)+25    System.Web.Mvc.Async.WrappedAsyncResult 1.End() +62 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +49 System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10 System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +28 System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +25 System.Web.Mvc.Async.WrappedAsyncResult 1.End()+62    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+49    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)+9    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+9042429    System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&amp; completedSynchronously)+184

版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.1016

\

家庭控制器:

 public ActionResult MyStores(double lat, double lng, string storename, string city, string state, string distributor, string channels)
    {
        MyStoresModel r = new MyStoresModel();
        r.stores = new List<StoreDataModel>();
        using (DisplayTrackingEntities ctx = new DisplayTrackingEntities())
        {

我试图从我的索引视图中调用它,如下所示:

            <input type="hidden" id="lat" name="lat" />
        <input type="hidden" id="lng" name="lng" />
        <div class="row">
            <div class="form-actions">
                <button class="btn" onclick="return UseGPS();">Use GPS</button>
                <button class="btn" onclick="return Search();">Search</button>
            </div>
        </div>

2 个答案:

答案 0 :(得分:2)

您正在获取System.ArgumentException,因为您尚未为任何隐藏字段指定值。您的视图应如下所示:

<input type="hidden" id="lat" name="lat" value="1.234" />
<input type="hidden" id="lng" name="lng" value="5.678" />

答案 1 :(得分:1)

您可以将默认值分配给lat&amp;在你的动作的参数列表中如下:

public ActionResult MyStores(double lat = 0.0,double lng = 0.0,string storename ...

如果这些字段在页面上有值,则它们会回发并覆盖默认值。如果他们没有值,他们就不会回发(因此为空),因此字段将保留默认值。基本上,这些字段现在是可选参数。