我无法理解这个错误的底部,因为当附加调试器时,它似乎不会发生.下面是代码.
这是Windows服务中的WCF服务器.每当存在数据事件时,服务就会调用NotifySubscribers方法(以随机间隔,但不常见 - 每天约800次).
当Windows窗体客户端订阅时,订户ID将添加到订阅者字典中,当客户端取消订阅时,将从字典中删除它.客户端取消订阅时(或之后)发生错误.看来,下次调用NotifySubscribers()方法时,foreach()循环失败并显示主题行中的错误.该方法将错误写入应用程序日志,如下面的代码所示.当附加调试器并且客户端取消订阅时,代码执行正常.
你看到这段代码有问题吗?我是否需要使字典线程安全?
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class SubscriptionServer : ISubscriptionServer
{
private static IDictionary<Guid, Subscriber> subscribers;
public SubscriptionServer()
{
subscribers = new Dictionary<Guid, Subscriber>();
}
public void NotifySubscribers(DataRecord sr)
{
foreach(Subscriber s in subscribers.Values)
{
try
{
s.Callback.SignalData(sr);
}
catch (Exception e)
{
DCS.WriteToApplicationLog(e.Message,
System.Diagnostics.EventLogEntryType.Error);
UnsubscribeEvent(s.ClientId);
}
}
}
public Guid SubscribeEvent(string clientDescription)
{
Subscriber subscriber = new Subscriber();
subscriber.Callback = OperationContext.Current.
GetCallbackChannel<IDCSCallback>();
subscribers.Add(subscriber.ClientId, subscriber);
return subscriber.ClientId;
}
public void UnsubscribeEvent(Guid clientId)
{
try
{
subscribers.Remove(clientId);
}
catch(Exception …Run Code Online (Sandbox Code Playgroud) 如何在视图中获取错误集合?
我不想使用Html Helper验证摘要或验证消息.相反,我想检查错误,如果有任何显示特定格式.另外在输入控件上我想检查特定的属性错误并在输入中添加一个类.
PS我正在使用Spark View Engine,但这个想法应该是一样的.
所以我想我可以做点像......
<if condition="${ModelState.Errors.Count > 0}">
DispalyErrorSummary()
</if>
....and also...
<input type="text" value="${Model.Name}"
class="?{ModelState.Errors["Name"] != string.empty} error" />
....
Run Code Online (Sandbox Code Playgroud)
或类似的东西.
UPDATE
我的最终解决方案如下所示:
<input type="text" value="${ViewData.Model.Name}"
class="text error?{!ViewData.ModelState.IsValid &&
ViewData.ModelState["Name"].Errors.Count() > 0}"
id="Name" name="Name" />
Run Code Online (Sandbox Code Playgroud)
如果此属性有错误,则仅添加错误css类.
我正在开发一个ASP.NET MVC 4应用程序.这个程序有一个基本形式.我的表单模型如下所示:
public class MyModel
{
public string Name { get; set; }
public bool Remember { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的表单中,我有以下HTML.
<input id="Name" name="Name" type="text" value="@Model.Name" />
<input id="Remember" name="Remember" type="checkbox" value="@Model.Remember" />
<label for="Remember"> Remember Me?</label>
Run Code Online (Sandbox Code Playgroud)
当我发布表单时,模型中的记住值始终为false.但是,模型中的Name属性具有值.我通过在以下设置断点来测试这个:
[HttpPost]
public ActionResult MyAction(MyModel model)
{
Console.WriteLine(model.Remember.ToString());
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚.为什么Checkbox值没有设置?
我在我的控制器中有这个功能.
[HttpPost]
public ActionResult Edit(EmployeesViewModel viewModel)
{
Employee employee = GetEmployee(viewModel.EmployeeId);
TryUpdateModel(employee);
if (ModelState.IsValid)
{
SaveEmployee(employee);
TempData["message"] = "Employee has been saved.";
return RedirectToAction("Details", new { id = employee.EmployeeID });
}
return View(viewModel); // validation error, so redisplay same view
}
Run Code Online (Sandbox Code Playgroud)
它一直失败,ModelState.IsValid不断返回false并重新显示视图.但我不知道错误是什么.
有没有办法获取错误并将其重新显示给用户?
我有@ Html.ValidationMessageFor帮助器和jquery不显眼的验证设置的剃刀视图.
我想调用控制器/操作,并通过使用已经设置的相同验证逻辑来显示操作返回的最终模型状态错误.
我已经做了一些代码,但是我想知道是否已经有办法自动完成它,即如果我将HTTP Bad Request作为AJAX响应捕获,我想从响应体中取出模型状态错误并将它们插入到不引人注目的验证.
我正在寻找完整的推荐解决方案,而不是解决方法:)
谢谢!
在我的控制器中,我添加了一些ModelState错误.因此,当我渲染我的视图时,我希望获得所有这些错误并更改包含错误的字段标签的颜色.
所以,我认为我需要获取所有ModelState错误,获取字段名称然后更改颜色.这是一个好方法吗?
如何在视图中获取ModelState错误?
if (!TryUpdateModel<Event>(evt))
{
// ... I need to retrieve the errors here
}
Run Code Online (Sandbox Code Playgroud)
有时,TryUpdateModel无法更新模型.我无法找到理由和例外?
我的 .Net 5./ASP.Net MVC 应用程序中有一个“编辑”页面。如果ModelState.IsValid是“false”,我想在拒绝整个页面之前检查各个错误。
问题:如何获取列表中无效项目的“名称” ModelState?
例如:
处理程序方法:public async Task<IActionResult> OnPostAsync()
if (!ModelState.IsValid): “错误的”
this.ModelState.Values[0]: SubKey={ID}, Key="ID", ValidationState=无效 Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateEntry {Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary.ModelStateNode}
代码:
foreach (ModelStateEntry item in ModelState.Values)
{
if (item.ValidationState == ModelValidationState.Invalid)
{
// I want to take some action if the invalid entry contains the string "ID"
var name = item.Key; // CS1061: 'ModelStateEntry 'does not contain a definition for 'Key'
...
Run Code Online (Sandbox Code Playgroud)
问题:如何从每个无效的 ModelState“值”项中读取“键”???
解决
我的基本问题是迭代“ModelState.Values”。相反,我需要迭代“ModelState.Keys”才能获取所有必需的信息。
解决方案1)
foreach (KeyValuePair<string, ModelStateEntry> modelStateDD in …Run Code Online (Sandbox Code Playgroud) 我在动作结果中添加了一个键值对,如下所示:
[HttpPost, Authorize]
public ActionResult ListFacilities(int countryid)
{
...
ModelState.AddModelError("Error","No facilities reported in this country!");
...
}
我在单元测试中有一些像这样繁琐的代码:
public void ShowFailforFacilities()
{
//bogus data
var facilities = controller.ListFacilities(1) as PartialViewResult;
Assert.AreSame("No facilities reported in this country!",
facilities.ViewData.ModelState["Error"].Errors.FirstOrDefault().ErrorMessage);
}
当然,只要我有一个错误,它就可以工作.
我不喜欢facilities.ViewData.ModelState["Error"].Errors.FirstOrDefault().ErrorMessage.
我是否有更简单的方法从该字典中获取值?
c# ×5
asp.net-mvc ×4
html ×2
modelstate ×2
validation ×2
.net-5 ×1
ajax ×1
asp.net ×1
concurrency ×1
dictionary ×1
nunit ×1
unit-testing ×1
wcf ×1