PopUp в MVC

Если вам в вашем MVC проекте нужен popup скажем для авторизации – то я предлагаю использовать для этого замечательный скрипт ColorBox.
Использовать его крайне просто, для начала можно скачать пакет из NuGet в Visual Studio. Также можно скачать собственно с сайта http://www.jacklmoore.com/colorbox

сам скрипт и примеры, в них есть примеры стилей и картинок для корректного отображения окна.

Дальше вам нужно подключить сам скрипт

к примеру:

<script src="~/Scripts/jquery.colorbox.js" type="text/javascript"></script>


и добавить стили

<link href="~/Content/colorbox.css" rel="stylesheet" type="text/css" />


также я добавил картинки которые шли в примерах, они меня как раз устраивают.

Ну а дальше все как в примере, добавляем скрипт:

<script>      
$(document).ready(function () 
{          
//Examples of how to assign the ColorBox event to elements          
$(".group1").colorbox({ rel: 'group1' });          
$(".group2").colorbox({ rel: 'group2', transition: "fade" });          
$(".group3").colorbox({ rel: 'group3', transition: "none", width: "75%", height: "75%" });          
$(".group4").colorbox({ rel: 'group4', slideshow: true });          
$(".ajax").colorbox();          
$(".youtube").colorbox({ iframe: true, innerWidth: 425, innerHeight: 344 });          
$(".iframe").colorbox({ iframe: true, width: "80%", height: "80%" });         
$(".inline").colorbox({ inline: true, width: "50%" });          
$(".callbacks").colorbox({              
onOpen: function () { alert('onOpen: colorbox is about to open'); },              
onLoad: function () { alert('onLoad: colorbox has started to load the targeted content'); },              
onComplete: function () { alert('onComplete: colorbox has displayed the loaded content'); },              
onCleanup: function () { alert('onCleanup: colorbox has begun the close process'); },              
onClosed: function () {alert('onClosed: colorbox has completely closed'); }          
});          
//Example of preserving a JavaScript event for inline calls.          
$("#click").click(function () 
{              
$('#click').css({ "background-color": "#f00", "color": "#fff", "cursor": "inherit" }).text("Open this window again and this message will still be here.");              
return false;          
});      
});  
</script>


И где-то, где нужно его вызываем

<p><a class='iframe' href="/home/test">Outside Webpage (Iframe)</a></p>


В моем случае мне отлично подходит iframe для отображения окна регистрации.

Для того чтобы контроллер вернул именно то что нужно, а не страницу целиком в ActionResult мы возвращаем не View, а PartialView.

public ActionResult test()        
{            
return PartialView("logon");        
}

Соответственно по классу ссылки скрипт определяет что ему делать, собственно таким образом можно делать все что угодно ;)

Шаблон C# MVVM

Хороший шаблон ViewModel для MVVM паттерна в WPF

public class BaseViewModel : INotifyPropertyChanged
{
public virtual void OnNavigatedTo(NavigationEventArgs args) { }  
public virtual void OnNavigatedFrom(NavigationEventArgs args) { }
public virtual void OnViewUnloaded(object sender, RoutedEventArgs e) { }
public virtual void OnViewLoaded(object sender, RoutedEventArgs e) { }
#region Propertychanged
protected void OnPropertyChanged(Expression> action)
{
var propertyName = GetPropertyName(action);
OnPropertyChanged(propertyName);
}
private static string GetPropertyName(Expression> action)
{
var expression = (MemberExpression)action.Body;
var propertyName = expression.Member.Name;
return propertyName;
}
private void OnPropertyChanged(string propertyName)
{
try
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
catch { }
}
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}

 

или

public class BaseViewModel : INotifyPropertyChanged
{
#region Propertychanged
protected void OnPropertyChanged<T>(Expression<Func<T>> action)
{
var propertyName = GetPropertyName(action);
this.OnPropertyChanged(propertyName);
}
private static string GetPropertyName<T>(Expression<Func<T>> action)
{
var expression = (MemberExpression)action.Body;
var propertyName = expression.Member.Name;
return propertyName;
}
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(propertyName);
handler(this, e);
}
}
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}

Использовать потом в виде OnPropertyChanged(()=> PorpertyName)

Паралельные операции в C# и как это использовать

 Паралельность может быть в двух видах.

1. Паралельные циклы

2. Паралельный LINQ

Как этим пользоваться?

Для паралельных операций надо использовать конструкции вида:

 

Parallel.ForEach(collection,
currentElement =>
{
// что-то делаем
});

 

Parallel.For(0, 50, i =>
{
// что-то делаем
});

 

для остановки Parallel.For:

Parallel.For(0, source.Length, (i, loopState) =>
{
// Take the first 100 values that are retrieved
// from anywhere in the source.
if (i < 100)
{
// Accessing shared object on each iteration
// is not efficient. See remarks.
double d = Compute(source[i]);
results.Push(d);
}
else
{
loopState.Stop();
return;
}

} // Close lambda expression.
); // Close Parallel.For

Очень важно использовать коллекции типа ConcurrentBag(T)
Из неймспейса  System.Collections.Concurrent
Иначе будут ошибки.

Что касается LINQ  то к запросу нужно добавить .AsParallel()

var test = from i in test.TestTables.AsParallel()
where i.PayDate >= date.Date 
select new { PaySum = i.PaySum};

 

Для сохранения порядка при выполнении запроса можно дописать .AsOrdered(), но это замедлит выполенение запроса.


Опять же надо быть осторожным, т.к. возможны ошибки связанными с доступом к переменным условия.

.