Asp.net MVC, 谁吃了我的id参数值?
生活随笔
收集整理的這篇文章主要介紹了
Asp.net MVC, 谁吃了我的id参数值?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
話說我有一個action:
public?void?SaveTask(Guid id,?string?title,?bool??isPublic)
準備讓它接收"CreateTask"和"EditTask"創建的表單:
????<form?action="SaveTask"?method="post">
????????<dl>
????????????<dt>標題</dt>
????????????<dd><input?type="text"??value=""??size="20"??name="title"??id="title"??/></dd>
??????????? <dt>公開</dt>
????????? <dd><input?type="checkbox"??value="true"??name="isPublic"??/> true</dd>
????????</dl>
?????? <input?type="hidden"??value="00000000-0000-0000-0000-000000000000"??name="id"??id="id"??/>
????????<input?type="submit"??value="創建任務"??name="submit"??id="submit"??/>
????</form>但是每次提交表單,都會出現異常:
[FormatException:?GUID?應包含帶?4?個短劃線的?32?位數(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。]
???System.Guid..ctor(String?g)?+2284
???System.ComponentModel.GuidConverter.ConvertFrom(ITypeDescriptorContext?context,?CultureInfo?culture,?Object?value)?+103
???System.ComponentModel.TypeConverter.ConvertFrom(Object?value)?+54
???System.Web.Mvc.Controller.ConvertParameterType(Object?value,?Type?destinationType,?String?parameterName,?String?actionName)?+161
[InvalidOperationException:?Cannot?convert?parameter?'id'?in?action?'SaveTask'?with?value?''?to?type?'System.Guid'.]
???System.Web.Mvc.Controller.ConvertParameterType(Object?value,?Type?destinationType,?String?parameterName,?String?actionName)?+301
???System.Web.Mvc.Controller.InvokeActionMethod(MethodInfo?methodInfo,?RouteValueDictionary?values)?+760
[InvalidOperationException:?A?value?is?required?for?parameter?'id'?in?action?'SaveTask'.?The?parameter?either?has?no?value?or?its?value?could?not?be?converted.?To?make?a?parameter?optional?its?type?should?either?be?a?reference?type?or?a?Nullable?type.]
???System.Web.Mvc.Controller.InvokeActionMethod(MethodInfo?methodInfo,?RouteValueDictionary?values)?+902
???System.Web.Mvc.Controller.InvokeAction(String?actionName,?RouteValueDictionary?values)?+263
???System.Web.Mvc.Controller.Execute(ControllerContext?controllerContext)?+161
???System.Web.Mvc.Controller.System.Web.Mvc.IController.Execute(ControllerContext?controllerContext)?+4
???System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase?httpContext)?+212
???System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext?httpContext)?+36
???System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext?httpContext)?+4
???System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()?+358
???System.Web.HttpApplication.ExecuteStep(IExecutionStep?step,?Boolean&?completedSynchronously)?+64
注意加下劃線的部分:不是明明有回傳的值"00000000-0000-0000-0000-000000000000"嗎,怎么變成了空字符串了呢?誰吃了我的參數值?
? 經過兩個小時艱苦卓絕的調查取證(其中包含了到處搜索Asp.net MVC preview 2源碼,以及試圖使用Reflector重建源項目未遂),最后靈機一動,把"id"改成"taskId",于是就一切正常了.
? 結論很顯然,"id"這個參數名在默認情況下是受到特殊對待的,只能在URL里附帶,不能post..
public?void?SaveTask(Guid id,?string?title,?bool??isPublic)
準備讓它接收"CreateTask"和"EditTask"創建的表單:
????<form?action="SaveTask"?method="post">
????????<dl>
????????????<dt>標題</dt>
????????????<dd><input?type="text"??value=""??size="20"??name="title"??id="title"??/></dd>
??????????? <dt>公開</dt>
????????? <dd><input?type="checkbox"??value="true"??name="isPublic"??/> true</dd>
????????</dl>
?????? <input?type="hidden"??value="00000000-0000-0000-0000-000000000000"??name="id"??id="id"??/>
????????<input?type="submit"??value="創建任務"??name="submit"??id="submit"??/>
????</form>但是每次提交表單,都會出現異常:
[FormatException:?GUID?應包含帶?4?個短劃線的?32?位數(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。]
???System.Guid..ctor(String?g)?+2284
???System.ComponentModel.GuidConverter.ConvertFrom(ITypeDescriptorContext?context,?CultureInfo?culture,?Object?value)?+103
???System.ComponentModel.TypeConverter.ConvertFrom(Object?value)?+54
???System.Web.Mvc.Controller.ConvertParameterType(Object?value,?Type?destinationType,?String?parameterName,?String?actionName)?+161
[InvalidOperationException:?Cannot?convert?parameter?'id'?in?action?'SaveTask'?with?value?''?to?type?'System.Guid'.]
???System.Web.Mvc.Controller.ConvertParameterType(Object?value,?Type?destinationType,?String?parameterName,?String?actionName)?+301
???System.Web.Mvc.Controller.InvokeActionMethod(MethodInfo?methodInfo,?RouteValueDictionary?values)?+760
[InvalidOperationException:?A?value?is?required?for?parameter?'id'?in?action?'SaveTask'.?The?parameter?either?has?no?value?or?its?value?could?not?be?converted.?To?make?a?parameter?optional?its?type?should?either?be?a?reference?type?or?a?Nullable?type.]
???System.Web.Mvc.Controller.InvokeActionMethod(MethodInfo?methodInfo,?RouteValueDictionary?values)?+902
???System.Web.Mvc.Controller.InvokeAction(String?actionName,?RouteValueDictionary?values)?+263
???System.Web.Mvc.Controller.Execute(ControllerContext?controllerContext)?+161
???System.Web.Mvc.Controller.System.Web.Mvc.IController.Execute(ControllerContext?controllerContext)?+4
???System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase?httpContext)?+212
???System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext?httpContext)?+36
???System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext?httpContext)?+4
???System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()?+358
???System.Web.HttpApplication.ExecuteStep(IExecutionStep?step,?Boolean&?completedSynchronously)?+64
注意加下劃線的部分:不是明明有回傳的值"00000000-0000-0000-0000-000000000000"嗎,怎么變成了空字符串了呢?誰吃了我的參數值?
? 經過兩個小時艱苦卓絕的調查取證(其中包含了到處搜索Asp.net MVC preview 2源碼,以及試圖使用Reflector重建源項目未遂),最后靈機一動,把"id"改成"taskId",于是就一切正常了.
? 結論很顯然,"id"這個參數名在默認情況下是受到特殊對待的,只能在URL里附帶,不能post..
總結
以上是生活随笔為你收集整理的Asp.net MVC, 谁吃了我的id参数值?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP Date()函数详细参数
- 下一篇: 大型机,说爱你不容易