![](/img/trans.png)
[英]How to use unobtrusive validation to make an input field required field if another input field is empty?
[英]Make input to Web Service field optional not required
我创建了一个示例Web服务,该服务将向用户询问一些信息,并以JSON形式返回所需的所有信息。 我这里有两个问题
如果您需要其他信息,请告诉我,这是我的Web服务代码
namespace WebServiceTest
{
/// <summary>
/// Summary description for WebServicePrueba
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class WebServicePrueba : System.Web.Services.WebService
{
private string User { get; set; }
private string UserID { get; set; }
private DateTime NewServiceDate { get; set; }
private DateTime NewServicesTo { get; set; }
private DateTime RenewServiceDate { get; set; }
private DateTime RenewServiceTo { get; set; }
[System.Web.Services.WebMethod(Description = "Get Services Received", EnableSession = true)]
public string getSeviceInformation(string name, string userId, DateTime newServiceDate, DateTime newServicesTo, DateTime renewServiceDate, DateTime renewServiceTo)
{
User = name;
UserID = userId;
NewServiceDate = newServiceDate;
NewServicesTo = newServicesTo;
RenewServiceDate = renewServiceDate;
RenewServiceTo = renewServiceTo;
if (User == "prueba" && UserID == "prueba")
{
if (renewServiceDate == DateTime.MinValue || renewServiceTo == DateTime.MinValue)
{
ArrayList list = this.participant.getAddedTRCTest(newServiceDate, newServicesTo);
return JsonConvert.SerializeObject(list);
}
else if (newServiceDate == DateTime.MinValue || newServicesTo == DateTime.MinValue)
{
ArrayList list = this.participant.getModifiedTRCTest(renewServiceDate, renewServiceTo);
return JsonConvert.SerializeObject(list);
}
else
{
ArrayList list = this.participant.getAddedTRCTest(newServiceDate, newServicesTo);
ArrayList list2 = this.participant.getModifiedTRCTest(renewServiceDate, renewServiceTo);
return JsonConvert.SerializeObject(list);
}
}
else if (User != "prueba" && UserID == "prueba")
{
return "Please check your username";
}
else if (User == "prueba" && UserID != "prueba")
{
return "Please check your UserID";
}
else
{
return "Please check both your username and userID";
}
}
}
}
这是我在运行Web服务并且不输入日期之一时遇到的错误(即,我输入newServiceDate
和newServicesTo
但未输入renewServiceDate
和renewServiceTo
或使用其他方法
System.ArgumentException: Cannot convert to System.DateTime.
Parameter name: type ---> System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
at System.Convert.ToDateTime(String value, IFormatProvider provider)
at System.String.System.IConvertible.ToDateTime(IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
--- End of inner exception stack trace ---
at System.Web.Services.Protocols.ScalarFormatter.FromString(String value, Type type)
at System.Web.Services.Protocols.ValueCollectionParameterReader.Read(NameValueCollection collection)
at System.Web.Services.Protocols.HtmlFormParameterReader.Read(HttpRequest request)
at System.Web.Services.Protocols.HttpServerProtocol.ReadParameters()
at System.Web.Services.Protocols.WebServiceHandler.CoreProcessRequest()
-----------------------------更新-------------------- ----
@Jianping Liu当我在函数中声明可为空的参数时,我不再能够测试Web服务,我得到`Test
该测试表单仅适用于将原始类型作为参数的方法。`这就是我声明的方式
[System.Web.Services.WebMethod(Description = "Get Services Received", EnableSession = true)]
public string getSeviceInformation(string name, string userId, DateTime? newServiceDate, DateTime? newServicesTo, DateTime? renewServiceDate, DateTime? renewServiceTo)
您可以为4 DateTime使用可为空的变量
private DateTime? NewServiceDate { get; set; }
private DateTime? NewServicesTo { get; set; }
private DateTime? RenewServiceDate { get; set; }
private DateTime? RenewServiceTo { get; set; }
并使用NewServiceDate.HasValue检查其中是否包含值。
getSeviceInformation方法的签名:公共字符串getSeviceInformation(字符串名称,字符串userId,DateTime,newServiceDate,DateTime,newServicesTo,DateTime,renewServiceDate,DateTime,renewServiceTo)
if(newServiceDate.HasValue)....在这里做一些事情
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.