我在ASP.Net 4.0中使用WCF与EntityFramework 4.1和MVC3与Razor.
DataAnnotations在以下场景中正常工作:
将POCO类放在另一个带有EF的DLL中,然后通过我的表示层直接调用填充模型.如果我尝试在前端网格上编辑电子邮件地址并故意放入虚假电子邮件,则会显示该属性的DataAnnotation错误.
但是,如果我使用WCF中间层调用方法(而不是直接调用),则数据会返回并且更新得很好,除非DataAnnotations在这种情况下不起作用.如果我尝试在前端网格上编辑电子邮件地址并故意放入虚假电子邮件,则该属性不会显示DataAnnotation .
如何使用WCF使其工作?在没有识别DataAnnotations的地方,必须存在某种WCF属性.
下面是相关代码:
2层方案:
模型
using System;
using System.Collections.Generic;
//using System.ServiceModel;
//using System.Runtime.Serialization;
using System.ComponentModel.DataAnnotations;
using DataAnnotationsExtensions;
namespace YeagerTechModel
{
public class Customer
{
public Customer()
{
this.Projects = new HashSet<Project>();
}
public short CustomerID { get; set; }
[Required]
[StringLength(50)]
[DataType(DataType.EmailAddress)]
[Email]
public string Email { get; set; }
[StringLength(50, MinimumLength = 3, ErrorMessage = "Must have a minimum length of 3.")]
[DataType(DataType.Text)]
public string …Run Code Online (Sandbox Code Playgroud) 我在一个View上有两个表单,在一个Controller中执行两个单独的Action方法.
第一个表单(frmRefresh)负责获取数据并在表单上显示,以便用户可以选择某些复选框.提交后,数据在ViewModel中返回正常,并正确显示在表单上.模板的11条记录和担保人的3条记录在表格上显示为复选框.
第二种形式(frmProcess)负责获取表单上的数据(从上面的第一篇文章中回来).用户在屏幕上进行选择,并根据Controller中的某些逻辑对其进行处理.我在模型中有List对象,并且假设我可以使用FormCollection来处理数据,因为复杂的对象.基本上,它们是复选框的集合.我真的需要使用应该在模型中提交的数据,因为在Controller中处理该数据.
提交第二个表单时,我意识到loanid&ddl将无法使用,除非我将它们放在一个隐藏的字段中(因为它们是单独的形式) - 这很好.我在理解方面遇到很大困难的是当我提交第二个表单(frmProcess)时,为什么模型视图绑定器不从表单中获取数据,将其放入模型并将其提交给我的GeneratePDF操作方法.?
第一,我真的需要一些帮助来理解为什么会发生这种情况和第二,我真的需要一个解决方案,它将我的模型数据从表单转移到action方法并处理它.正如您在Controller中看到的那样,在代码的最后,我将枚举ViewModel中的模板来处理数据.
请帮助,因为我在工作中完全坚持这个,他们依赖我这个.我只是不明白为什么模型绑定器不采用表单上的值并将其提交给action方法进行处理.看来我遗漏了一些东西,允许数据在提交时返回模型.
以下是我的相关代码:ViedwModel
public partial class ViewModelTemplate_Guarantors
{
public int SelectedTemplateId { get; set; }
public IEnumerable<PDFTemplate> Templates { get; set; }
public int SelectedGuarantorId { get; set; }
public IEnumerable<tGuarantor> Guarantors { get; set; }
public string LoanId { get; set; }
public string SelectedDeptText { get; set; }
public string SelectedDeptValue { get; set; }
public string LoanType { get; set; }
public bool ShowTemps { get; set; }
public string Error …Run Code Online (Sandbox Code Playgroud) 我可能真的忽略了一些东西,但是当使用Linq to Entities linq语句创建一个类时,intellisense中缺少Select方法!
我正在使用Visual Studio 2013和EntityFrameWork 6.0.2.
我有以下代码片段,intellisense中下一个最接近的方法是RemoveRange和SingleAsync.介于两者之间我应该找到Select!
我想从Ratings类中获取一部分属性,而不是全部.
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Threading.Tasks;
using AjaxCallModel;
using AjaxCallModel.ViewModels;
namespace WcfServiceLibraryAjaxCall
{
public class AjaxCall : IAjaxCall
{
public async Task<List<Rating>> SelectRatingsAsync()
{
try
{
using (BillYeagerEntities DbContext = new BillYeagerEntities())
{
DbContext.Configuration.ProxyCreationEnabled = false;
DbContext.Database.Connection.Open();
var ratings = await DbContext.Ratings.ToListAsync();
return ratings;
}
}
catch (Exception ex)
{
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将它与我的另一个项目进行比较,则没有问题(请参阅下面的代码).
有人知道我做错了什么或错过了吗?
using System;
using System.Collections.Generic;
using …Run Code Online (Sandbox Code Playgroud) 当尝试通过javascript编辑和保存ajax调用中的记录时,我收到上述主题错误.
我做了一些查找,我唯一能找到的是关于"compareByIdentity"属性的东西,在我的情况下我无法得到如何实现,如果是这样的话.
下面的类是有一对多关系的地方.许多"时间轨迹"可能有一个"项目".这是"TimeTrackings"的类,其中"ProjectID"是外键.
我正在使用WCF应用程序使用EF 6检索和编辑数据.这是我第一次在我的应用程序中遇到它.显然,由于建立关系的方式.
有人可以告诉我如何纠正这个错误?
namespace YeagerTechDB.Models
{
using System;
using System.ComponentModel.DataAnnotations;
using System.Runtime.Serialization;
[Serializable, DataContract(IsReference = true)]
public partial class TimeTracking
{
[Key]
[ScaffoldColumn(false)]
[Editable(false)]
[Display(Name = "Tracking ID")]
[DataMember]
public int TimeTrackingID { get; set; }
[Required]
[Display(Name = "Project ID")]
[DataMember]
public short ProjectID { get; set; }
[Required]
[DataType(DataType.Date)]
[DataMember]
public DateTime StartDate { get; set; }
[Required]
[DataType(DataType.Date)]
[DataMember]
public DateTime EndDate { get; set; }
[DataType(DataType.MultilineText)]
[DataMember]
public string Notes { get; set; …Run Code Online (Sandbox Code Playgroud) 我试图将一个JS变量分配给ViewBag属性,并在Html ActionLink中使用该属性.
但是,我得到一个设计时编译错误:getJSON方法正下方的"语法错误" @ViewBag.CustomerID = data.CustomerID;
有人可以帮我解决这个问题吗?
这是我的代码:
@Html.ActionLink("Click to edit Customer", "EditCust", "Customer", new { ViewBag.CustomerID }, null);
<script type="text/javascript">
$(function ()
{
var selID = null
$("#Name").change(function ()
{
selID = $("#Name option:selected").val();
var url = '/Project/SpecificCustomer';
var param = { Id: selID };
$.getJSON(url, param, function (data)
{
@ViewBag.CustomerID = data.CustomerID;
var html = "<table border='1' cellpadding='3'>";
html += "<tr>";
html += "<td>" + "Customer ID: " + data.CustomerID + "</td>";
html += "</tr>";
html += "<tr>"; …Run Code Online (Sandbox Code Playgroud) 我有以下代码,只是想确保我在高层次上拥有多线程的概念。
public async Task<List<Category>> GetProjectsByCategoryIDAsync(Int16 categoryid)
{
try
{
using (YeagerTechEntities DbContext = new YeagerTechEntities())
{
DbContext.Configuration.ProxyCreationEnabled = false;
DbContext.Database.Connection.Open();
var category = await DbContext.Categories.Include("Projects").Where(p => p.CategoryID == categoryid).ToListAsync();
return category;
}
}
catch (Exception)
{
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我的理解:
我有点模糊的地方是 await 关键字。显然,异步编程的好处是该方法不需要等待任务完成,然后另一个请求就在它后面。但是使用 await 关键字,任务会一直等到操作完成。
通过同步编程,一切都以顺序模式进行处理。
这种方法如何允许请求同时进入并以比同步编程更快的方式执行?
我只需要一个高层次的解释来理解这个概念。
非常感谢。
我想确保我有正确的代码来异步调用我的Web服务.如果有人可以请求帮助,我会非常感激.
我正在使用Visual Studio 2013和4.5.1框架.
我的客户端应用程序中有以下代码调用该服务:
public async Task<ActionResult> Read([DataSourceRequest]DataSourceRequest request)
{
try
{
YeagerTechWcfService.Status[] status = await db.GetStatusesAsync();
var serializer = new JavaScriptSerializer();
var result = new ContentResult();
serializer.MaxJsonLength = Int32.MaxValue;
result.Content = serializer.Serialize(status.ToDataSourceResult(request));
result.ContentType = "application/json";
return result;
}
Run Code Online (Sandbox Code Playgroud)
我在上面的方法调用的WCF服务合同中有以下内容:
[ServiceContract]
public interface IYeagerTechWcfService
{
[OperationContract]
Task<List<Status>> GetStatusesAsync();
Run Code Online (Sandbox Code Playgroud)
我在我的Web服务类中有以下内容,它实现了同一方法的接口类:
public class YeagerTechWcfService : IYeagerTechWcfService
{
public async Task<List<Status>> GetStatusesAsync()
{
try
{
using (YeagerTechEntities DbContext = new YeagerTechEntities())
{
DbContext.Configuration.ProxyCreationEnabled = false;
DbContext.Database.Connection.Open();
var status = await …Run Code Online (Sandbox Code Playgroud) 我需要使用以下语法了解DateTime值的大小参数:
adapter.InsertCommand.Parameters.Add("@deliveryDateAndTime", SqlDbType.DateTime,10,"deliveryDateAndTime");
Run Code Online (Sandbox Code Playgroud)
我无法使用以下语法,因为我正在将更新批处理在数据表中。
adapter.InsertCommand.Parameters.Add("@deliveryDateAndTime", SqlDbType.DateTime);
adapter.InsertCommand.Parameters["@deliveryDateAndTime"] = *variable*.value;
Run Code Online (Sandbox Code Playgroud)
以下是我需要使用的代码(为清楚起见,已缩写)。请注意,在adapter.InsertCommand.Parameters.Add("@deliveryDateAndTime", SqlDbType.DateTime,10,"deliveryDateAndTime");语句内部,第一个参数引用对应的SQL参数,第四个参数对应于数据表中该值的数据。
DataTable dt = new DataTable();
foreach (FuelDelivery fd in fuelDelivery.FuelDeliveries)
{
DataRow dr = dt.NewRow();
dr["deliveryDateAndTime"] = fd.DeliveryDateAndTime;
dt.Rows.Add(dr);
}
using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["HHSqlConnection"].ToString()))
{
// Create a SqlDataAdapter.
SqlDataAdapter adapter = new SqlDataAdapter();
// Set the INSERT command and parameter.
adapter.InsertCommand.Parameters.Add("@deliveryDateAndTime", SqlDbType.DateTime,10,"deliveryDateAndTime");
adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
// Set the batch size. Zero represents the maximum amt …Run Code Online (Sandbox Code Playgroud) 当使用jQuery的客户端要调用的函数的MVC控制器的方法,我需要装饰我的MVC方法与异步任务异步和等待关键字,因为jQuery的呼叫已经固有的异步调用?
我显然缺少一些能够显示带有URL动作链接的模态对话框的东西.
我知道如何从jQuery单击事件显示引导对话框,但我希望做的是以下内容:
我有一个带有url.action链接的Index页面.当用户点击链接时,我链接到相应的控制器操作方法(编辑),没有任何问题(在调试期间看到),希望显示引导模式弹出对话框.但是,不会弹出模态对话框.
如果我在操作链接上包含数据目标,则该链接甚至不起作用.如果我将其删除,它将进入View,但不会弹出模态对话框,因为链接上没有任何内容说明数据目标是什么.我希望我在模式弹出窗口的目标链接上的语法不正确.我希望如果我为对话框包含正确的bootstrap属性,它会弹出.
我真的可以在这里使用一些帮助,非常感谢.
这是我的索引页面上的链接(包括数据目标).请再次注意,如果我从下面的代码段中排除 "data-toggle"和"data-target",我会进入View,但不会弹出对话框.
data-toggle="modal", data-target="#categoryEditModal"
<a href="@Url.Action("Edit", "Category", new { area = "Categories", id = item.CategoryID }) data-toggle="modal", data-target="#categoryEditModal"><span class="glyphicon glyphicon-edit" aria-hidden="true"></span>Edit</a>
Run Code Online (Sandbox Code Playgroud)
这是我的目的地视图.我可以验证在调试时,模型中是否填充了Model.CategoryID和Model.CategoryDescription.
<div class="modal" id="categoryEditModal" tabindex="-1" role="dialog" aria-labelledby="categoryModal-label" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="categoryModal-label">Category Description</h4>
</div>
<div class="modal-body">
<div class="form-group">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.CategoryDescription, htmlAttributes: new { @class = "control-label required col-md-2 col-sm-2 col-xs-2" …Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×4
c# ×4
javascript ×3
jquery ×3
wcf ×3
.net ×2
async-await ×2
asynchronous ×2
ado.net ×1
asp.net ×1
asp.net-4.5 ×1
c#-5.0 ×1
datetime ×1
getjson ×1
linq ×1
sqlparameter ×1
task ×1