小编mos*_*o87的帖子

ModelState.AddModelError - 未显示错误

在我的控制器中捕获到异常后,我想为电子邮件字段设置错误消息:

...
catch (EmailAlreadyExistsException emailAlreadyExistsException)
{
    ModelState.AddModelError("Useraccount_Email", "This is an error message");

    RegisterViewModel viewModel = new RegisterViewModel
    {
        Useraccount = useraccount,
        InformationMessages = InformationMessageHelper.GetInformationMessages()
    };
    return PartialView(viewModel);
}
...
Run Code Online (Sandbox Code Playgroud)

现在应该在我的视图中显示错误消息:

@using (Ajax.BeginForm("Register", new AjaxOptions { HttpMethod = "Post", OnSuccess = "registerAjaxSuccess" }))
{
    @Html.ValidationSummary(true)        
    <div class="ym-grid">
        <div class="ym-g33 ym-gl">
            <div class="ym-gbox">
                @Html.LabelFor(model => model.Useraccount.LastName)
            </div>
...
    <div class="ym-grid">
        <div class="ym-g33 ym-gl">
            <div class="ym-gbox">
                @Html.LabelFor(model => model.Useraccount.Email)
            </div>
        </div>
        <div class="ym-g33 ym-gl">
            <div class="ym-gbox">                  
                @Html.EditorFor(model => model.Useraccount.Email, new { required = …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc modelstate asp.net-mvc-3

4
推荐指数
1
解决办法
4574
查看次数

模拟抽象保护方法

我有一个抽象类:

public abstract class MyClass
{
    protected abstract bool IsSavable();

    protected bool IsExecutable()
    {
        //New mode or edit mode
        if (ViewMode == ViewMode.New || ViewMode == ViewMode.Edit)
        {
            return IsSavable();
        }

        //Search mode
        if (ViewMode == ViewMode.Search)
        {
            return true;
        }

        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想对这门课进行单元测试.因此,我需要模拟"IsSavable"方法.它应该总是返回"true".

我知道如何用Moq模拟我的抽象类.但是,如何模拟我的抽象受保护方法,使其返回true?

函数IsSavable在我的抽象类中通过具体方法(IsExecuteable)调用.我想测试一下这个方法.我知道大多数人会建议在实现"IsSavable"的类中测试它们.不幸的是,这将是很多类,我想测试我的方法IsExecutable只有一次.

c# unit-testing moq

4
推荐指数
1
解决办法
3372
查看次数

绑定到xaml中的enum的显示名称属性

我有以下枚举:

public enum ViewMode
{
    [Display(Name = "Neu")]
    New,
    [Display(Name = "Bearbeiten")]
    Edit,
    [Display(Name = "Suchen")]
    Search
}
Run Code Online (Sandbox Code Playgroud)

我正在使用xaml和数据绑定在窗口中显示枚举:

<Label Content="{Binding CurrentViewModel.ViewMode}" Grid.Column="2" VerticalContentAlignment="Bottom" Height="43" HorizontalContentAlignment="Right"/>
Run Code Online (Sandbox Code Playgroud)

但这不显示显示名称属性。我该怎么办?

在我的viewModel中,可以使用扩展方法来获取显示名称属性:

public static class EnumHelper
{
    /// <summary>
    /// Gets an attribute on an enum field value
    /// </summary>
    /// <typeparam name="T">The type of the attribute you want to retrieve</typeparam>
    /// <param name="enumVal">The enum value</param>
    /// <returns>The attribute of type T that exists on the enum value</returns>
    public static T GetAttributeOfType<T>(this Enum enumVal) …
Run Code Online (Sandbox Code Playgroud)

c# wpf enums xaml

4
推荐指数
1
解决办法
5301
查看次数

模拟存储库的插入方法

我想对以下方法进行单元测试:

void Insert(TEntity entity);
Run Code Online (Sandbox Code Playgroud)

该方法的类已被嘲笑(我正在使用Moq)。

现在,我想做一个基于状态的测试,并告诉Moq是否调用了此方法,必须将一个对象插入到列表中。我怎样才能做到这一点?

useraccountRepository.Setup(r => r.Insert(useraccountBeforeLogin)).???
Run Code Online (Sandbox Code Playgroud)

怎么了 有一个引发事件的引发方法。我可以用这个吗?

unit-testing moq mocking

3
推荐指数
2
解决办法
2615
查看次数

垂直居中网页元素

将焦点更改为网站的另一个元素(例如,通过按 TAB 到另一个输入字段)不在您的查看区域(例如,您位于页面底部而新元素位于顶部)时,所有浏览器(在 Windows 操作系统上测试过的 Internet Explorer、Firefox、Chrome)似乎滚动到足以使具有新焦点的元素可见。

例子:

Image
Text
Input text
...
Footer
Run Code Online (Sandbox Code Playgroud)

当你在FooterImageInput text是不是你的可视区域内,你现在压片,从而进行焦点跳跃到Input text这个领域现在是你,但不可见的Image,也没有Text

虽然这种行为在大多数情况下可能是合适的,但在我的情况下却不是。为了防止它,我建议聚焦元素垂直居中。如何才能做到这一点?

为了更清楚地说明:

这是整个页面:

在此处输入图片说明

我向下滚动到底部,所以只有“这是页脚”可见:

在此处输入图片说明

我现在通过按 Tab 键来改变焦点。焦点跳转到文本输入。不幸的是,此文本字段上方的元素不可见:

在此处输入图片说明

html javascript css

3
推荐指数
1
解决办法
2255
查看次数

作为参数的数组未定义

刚试过JSFiddle中的这段代码(学习JS atm):

var checkArrayForDuplicates = new function(arrayToCheck, content) {
    alert(arrayToCheck);
}

var numbers = new Array(1, 2, 3, 4, 5, 5);    
checkArrayForDuplicates(numbers, 5);
Run Code Online (Sandbox Code Playgroud)

但是函数内的arrayToCheck(数字)总是未定义的.:(

javascript jsfiddle

1
推荐指数
1
解决办法
37
查看次数

从其他列表中查找ID

我有两个清单:

List<MasterData> masterDataList;
List<Job> jobList;
Run Code Online (Sandbox Code Playgroud)

我的课程看起来像这样:

public class Job
{
    ...
    public int MasterDataId { get; set; } //foreign key
}
Run Code Online (Sandbox Code Playgroud)

和:

public class MasterData
{
    public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我现在想要遍历我jobList并获得所有具有其中一个MasterDataIdid的工作masterDataList.如何使用LINQ(对象)执行此操作?

c# linq linq-to-objects

1
推荐指数
1
解决办法
54
查看次数

仅在绑定输入处更改焦点后才设置属性

在我的 xaml 中,我有一个文本框,它绑定到我的视图模型中的一个属性:

XAML:

<TextBox HorizontalAlignment="Left" Height="30" Margin="10,10,0,0" TextWrapping="Wrap" Text="{Binding City}" VerticalAlignment="Top" Width="191" Grid.Column="1" Grid.Row="6"/>
Run Code Online (Sandbox Code Playgroud)

查看型号:

public class MyViewModel : INotifyPropertyChanged
{
    ...
    public string City
    {
        get { return _model.Address.City; }
        set
        {
            if (_model.Address.City != value)
            {
                _model.Address.City = value;
                RaisePropertyChanged("City");
            }
        }
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

双向数据绑定效果很好,但似乎只有在焦点从城市输入更改为另一个对象时才设置属性值。

我想在按下热键 (ENTER) 时保存我的上下文。当我现在输入一个城市并随后按 ENTER 时,该属性不包含新值。当我输入一个城市时,将焦点更改为另一个对象并按 ENTER,该属性包含正确的值。

如何解决这个问题呢?

c# wpf xaml mvvm

1
推荐指数
1
解决办法
1252
查看次数

声明泛型类的变量

我有以下抽象类:

public abstract class ViewModel<TPrimaryModel> : ObservableObject
    where TPrimaryModel : TwoNames, new()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

在另一个类中,我想声明一个可以将ViewModel保存到的变量:

public class MainViewModel
{
    private ViewModel _currentViewModel;
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为需要2个参数(因为通用).我不介意将哪个ViewModel保存到_currentViewModel,只要该对象继承自抽象类ViewModel.

这不起作用:

public class MainViewModel
{
    #region Members
    private ViewModel<TwoNames> _currentViewModel;
    #endregion
}
Run Code Online (Sandbox Code Playgroud)

编译错误:

The type 'typename' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'parameter' in the generic type or method 'generic'
Run Code Online (Sandbox Code Playgroud)

这是因为TwoNames是一个抽象类.删除"new()"约束对我来说不是一个解决方案,因为我需要在我的抽象类(ViewModel)中实例化"TwoNames"的新对象.还有其他想法吗?

c# generics

1
推荐指数
1
解决办法
136
查看次数