<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Programming and Learning from SD</title>
        <link>http://geekswithblogs.net/Aligned/Default.aspx</link>
        <description />
        <language>en-US</language>
        <copyright>Aligned</copyright>
        <managingEditor>klogan@omnitech-inc.com</managingEditor>
        <generator>Subtext Version 0.0.0.0</generator>
        <image>
            <title>Programming and Learning from SD</title>
            <url>http://geekswithblogs.net/images/RSS2Image.gif</url>
            <link>http://geekswithblogs.net/Aligned/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>Use the NotMapped Attribute with Entity Framework in Partial Classes</title>
            <category>Entity Framework</category>
            <link>http://geekswithblogs.net/Aligned/archive/2013/05/15/use-the-notmapped-attribute-with-entity-framework-in-partial-classes.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/Aligned/archive/2013/05/15/use-the-notmapped-attribute-with-entity-framework-in-partial-classes.aspx'&gt;http://geekswithblogs.net/Aligned/archive/2013/05/15/use-the-notmapped-attribute-with-entity-framework-in-partial-classes.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I wanted to add a property to send to my JavaScript class through WebApi, but didn’t want it in the database. I was getting an error telling me I had an invalid name on the EF 5 selection from the database. Adding the &lt;a href="http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.notmappedattribute(v=vs.103).aspx" target="_blank"&gt;NotMapped attribute&lt;/a&gt; to the property did the trick. I get it on the JavaScript side as well. I found the answer (again) on &lt;a href="http://stackoverflow.com/questions/10389595/ef-code-first-migration-ignore-property" target="_blank"&gt;StackOverflow&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Example:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ComponentAttribute
{
    [NotMapped]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsModified { get; set; }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt; &lt;img src="http://geekswithblogs.net/Aligned/aggbug/152932.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Aligned</dc:creator>
            <guid>http://geekswithblogs.net/Aligned/archive/2013/05/15/use-the-notmapped-attribute-with-entity-framework-in-partial-classes.aspx</guid>
            <pubDate>Wed, 15 May 2013 21:32:32 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Aligned/comments/152932.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Aligned/archive/2013/05/15/use-the-notmapped-attribute-with-entity-framework-in-partial-classes.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Aligned/comments/commentRss/152932.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Aligned/services/trackbacks/152932.aspx</trackback:ping>
        </item>
        <item>
            <title>jQuery 1.9.1+ Ajax Post is Failing even though it has a 200 Status</title>
            <category>JavaScript</category>
            <category>jQuery</category>
            <link>http://geekswithblogs.net/Aligned/archive/2013/05/08/jquery-1.9.1-ajax-post-is-failing-even-though-itrsquos-a.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/Aligned/archive/2013/05/08/jquery-1.9.1-ajax-post-is-failing-even-though-itrsquos-a.aspx'&gt;http://geekswithblogs.net/Aligned/archive/2013/05/08/jquery-1.9.1-ajax-post-is-failing-even-though-itrsquos-a.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I’m using my &lt;a href="http://geekswithblogs.net/Aligned/archive/2013/04/12/dataservice-and-ajaxservice.aspx" target="_blank"&gt;DataService and AjaxService for JavaScript&lt;/a&gt; and upgraded to jQuery 1.9.1. One of my post methods, which was working before, started hitting the deferred fail, instead of the deferred’s done, even though the status code was 200. This method is not returning any JSON to the caller. The &lt;a href="http://jquery.com/upgrade-guide/1.9/#jquery-ajax-returning-a-json-result-of-an-empty-string" target="_blank"&gt;1.9 upgrade guide&lt;/a&gt; states “Prior to 1.9, an ajax call that expected a return data type of JSON or JSONP would consider a return value of an empty string to be a success case, but return a null to the success handler or promise. As of 1.9, an empty string returned for JSON data is considered to be malformed JSON (because it is); this will now throw an error. Use the error handler to catch such cases.”. This &lt;a href="http://forum.jquery.com/topic/jquery-calls-error-callback-on-successful-ajax-request-status-200" target="_blank"&gt;question on the forums&lt;/a&gt; lead me to the upgrade guide and “Identifier” says to return a 204 instead. I change my WebApi method to return a 204 and now it’s working again.&lt;/p&gt;  &lt;p&gt;I now am using return this.Request.CreateResponse(HttpStatusCode.NoContent);&lt;/p&gt;  &lt;p&gt;Here’s the method:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;[System.Web.Mvc.HttpPost]
&lt;span class="kwrd"&gt;public&lt;/span&gt; HttpResponseMessage UpdateAlias(JObject jsonData)
{
    &lt;span class="rem"&gt;// http://www.asp.net/web-api/overview/web-api-routing-and-actions/exception-handling&lt;/span&gt;
    &lt;span class="rem"&gt;// http://www.west-wind.com/weblog/posts/2012/May/08/Passing-multiple-POST-parameters-to-Web-API-Controller-Methods&lt;/span&gt;
    &lt;span class="kwrd"&gt;int&lt;/span&gt; assetId = 0;
    &lt;span class="kwrd"&gt;int&lt;/span&gt; userId = 0;
    &lt;span class="kwrd"&gt;string&lt;/span&gt; alias = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
    &lt;span class="kwrd"&gt;try&lt;/span&gt;
    {
        assetId = jsonData[&lt;span class="str"&gt;"AssetId"&lt;/span&gt;].Value&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;();
        userId = jsonData[&lt;span class="str"&gt;"UserId"&lt;/span&gt;].Value&amp;lt;&lt;span class="kwrd"&gt;int&lt;/span&gt;&amp;gt;();
        alias = jsonData[&lt;span class="str"&gt;"Alias"&lt;/span&gt;].Value&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (assetId == 0)
        {
            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentException(&lt;span class="str"&gt;"Asset Id is required."&lt;/span&gt;);
        }

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (userId == 0)
        {
            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentException(&lt;span class="str"&gt;"User Id is required."&lt;/span&gt;);
        }

        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrWhiteSpace(alias))
        {
            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; ArgumentException(&lt;span class="str"&gt;"Alias is required and cannot be empty."&lt;/span&gt;);
        }
        
        &lt;span class="rem"&gt;// more code here…&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="rem"&gt;        // notice the noContent&lt;/span&gt;
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;this&lt;/span&gt;.Request.CreateResponse(HttpStatusCode.NoContent);
    }
    &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
    {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;._logger.Warn(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"Error in UpdateAlias assetId:{0}, userId:{1}, new alias: {2}"&lt;/span&gt;, assetId, userId, alias), ex);
        &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; HttpResponseException(&lt;span class="kwrd"&gt;new&lt;/span&gt; HttpResponseMessage
                                        {
                                            StatusCode = HttpStatusCode.InternalServerError,
                                            Content = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringContent(&lt;span class="str"&gt;"Error!"&lt;/span&gt;)
                                        });
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt; &lt;img src="http://geekswithblogs.net/Aligned/aggbug/152897.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Aligned</dc:creator>
            <guid>http://geekswithblogs.net/Aligned/archive/2013/05/08/jquery-1.9.1-ajax-post-is-failing-even-though-itrsquos-a.aspx</guid>
            <pubDate>Wed, 08 May 2013 14:41:26 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Aligned/comments/152897.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Aligned/archive/2013/05/08/jquery-1.9.1-ajax-post-is-failing-even-though-itrsquos-a.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Aligned/comments/commentRss/152897.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Aligned/services/trackbacks/152897.aspx</trackback:ping>
        </item>
        <item>
            <title>Handling IE 9 &amp;amp; 10's and Chrome&amp;rsquo;s clear button with Knockout binding</title>
            <category>Knockout Js</category>
            <link>http://geekswithblogs.net/Aligned/archive/2013/05/07/handling-ie-9-amp-10s-and-chromersquos-clear-button-with.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/Aligned/archive/2013/05/07/handling-ie-9-amp-10s-and-chromersquos-clear-button-with.aspx'&gt;http://geekswithblogs.net/Aligned/archive/2013/05/07/handling-ie-9-amp-10s-and-chromersquos-clear-button-with.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Our tester found a bug with my search box. The search box filters a grid using observables. IE 9 and 10, and Crome adds in a x clear option, this wasn’t changing the observable, so the filter wasn’t getting cleared out.&lt;/p&gt;  &lt;p&gt;&lt;a title="image from SO" href="http://i.stack.imgur.com/0uxtg.png" target="_blank"&gt;&lt;img src="http://i.stack.imgur.com/0uxtg.png" /&gt;&lt;/a&gt;    &lt;br /&gt;(image from &lt;a href="http://stackoverflow.com/questions/13481577/how-can-i-disable-the-clear-button-that-ie10-inserts-into-textboxes" target="_blank"&gt;SO&lt;/a&gt; question)&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="searchTextBox"&lt;/span&gt; &lt;span class="attr"&gt;class&lt;/span&gt;&lt;span class="kwrd"&gt;="searchTextBox"&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="text"&lt;/span&gt; &lt;span class="attr"&gt;maxlength&lt;/span&gt;&lt;span class="kwrd"&gt;="25"&lt;/span&gt;
       &lt;span class="attr"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;="Search"&lt;/span&gt; &lt;span class="attr"&gt;placeholder&lt;/span&gt;&lt;span class="kwrd"&gt;="Search"&lt;/span&gt;
       &lt;span class="attr"&gt;data-bind&lt;/span&gt;&lt;span class="kwrd"&gt;="value: GridVm.FilterText,
       valueUpdate: 'afterkeydown',
       disable: GridVm.Data().length == 0"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;I posted &lt;a href="http://stackoverflow.com/questions/16421463/handle-ie-9-10s-clear-button-with-knockout-binding/" target="_blank"&gt;my question and ended up answering my own question on StackOverflow&lt;/a&gt; and thought I would share it here as well.&lt;/p&gt;

&lt;p&gt;My solution involves using the &lt;a title="http://knockoutjs.com/documentation/event-binding.html" href="http://knockoutjs.com/documentation/event-binding.html"&gt;http://knockoutjs.com/documentation/event-binding.html&lt;/a&gt; and &lt;a href="http://stackoverflow.com/questions/14700466/attach-event-to-clear-icon-in-ie10-textbox" target="_blank"&gt;the input event&lt;/a&gt;.&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="search"&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="input1"&lt;/span&gt; &lt;/pre&gt;

&lt;pre class="csharpcode"&gt;  &lt;span class="attr"&gt;data-bind&lt;/span&gt;&lt;span class="kwrd"&gt;="value: textForBox, &lt;/span&gt;&lt;/pre&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;    valueUpdate: 'afterkeydown',
    event: { input: cleared }"&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;br /&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; vm = {
    textForBox: ko.observable(),
    cleared: &lt;span class="kwrd"&gt;function&lt;/span&gt; (data, &lt;span class="kwrd"&gt;event&lt;/span&gt;) {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;event&lt;/span&gt;.currentTarget.value === &lt;span class="str"&gt;''&lt;/span&gt;) {
           &lt;span class="kwrd"&gt;this&lt;/span&gt;.textForBox(&lt;span class="str"&gt;''&lt;/span&gt;);
        }
    }
};
ko.applyBindings(vm);&lt;/pre&gt;

&lt;pre class="csharpcode"&gt; &lt;/pre&gt;
See &lt;a href="http://jsfiddle.net/logankd/LH7RT/" target="_blank"&gt;my jsFiddle showing the solution&lt;/a&gt;. 

&lt;p&gt;Hope it helps!&lt;/p&gt; &lt;img src="http://geekswithblogs.net/Aligned/aggbug/152886.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Aligned</dc:creator>
            <guid>http://geekswithblogs.net/Aligned/archive/2013/05/07/handling-ie-9-amp-10s-and-chromersquos-clear-button-with.aspx</guid>
            <pubDate>Tue, 07 May 2013 16:02:18 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Aligned/comments/152886.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Aligned/archive/2013/05/07/handling-ie-9-amp-10s-and-chromersquos-clear-button-with.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Aligned/comments/commentRss/152886.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Aligned/services/trackbacks/152886.aspx</trackback:ping>
        </item>
        <item>
            <title>MVC Validation of a Password with a Regular Expression</title>
            <category>JavaScript</category>
            <category>Unit Testing</category>
            <category>MVC 4</category>
            <link>http://geekswithblogs.net/Aligned/archive/2013/04/26/mvc-validation-of-a-password-with-a-regular-expression.aspx</link>
            <description>&lt;p&gt;Originally posted on: &lt;a href='http://geekswithblogs.net/Aligned/archive/2013/04/26/mvc-validation-of-a-password-with-a-regular-expression.aspx'&gt;http://geekswithblogs.net/Aligned/archive/2013/04/26/mvc-validation-of-a-password-with-a-regular-expression.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I have requirement (specification) that the password has to be at least 7 characters long and contain a special character (&lt;a href="mailto:~@#$"&gt;~@#$&lt;/a&gt;&amp;amp;*()-_+=) which are all the specials in the number keyboard row. I found that using the RegularExpression DataAnnotations is really slick, but there was a point that caught me for a while. &lt;/p&gt;  &lt;p&gt;The problem is that &lt;span class="str"&gt;@".*([!@#$&amp;amp;*()-_+=]+).*$" works in the UI, but fails in the unit test. @"[!@#$&amp;amp;*()-_+=]+" works in the test, but not in the UI (the MVC unobtrusive library wants a full match). When I removed the ‘()’ it works in both. &lt;font style="background-color: #ffff00"&gt;So my solution, after losing some time, is to add the escape before the '-'. This works: ^.*(?=.*[!@#$%^&amp;amp;*\(\)_\-+=]).*$ (thanks to my co-worker Jason).&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Here comes the code:&lt;/p&gt;  &lt;p&gt;The Model for the MVC binding. Focus on the RegEx for NewPassword:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PasswordResetModel
{
    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Gets or sets the new password.&lt;/span&gt;
    &lt;span class="rem"&gt;/// It must be at least 7 characters and have at least one special character.&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;value&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// The new password.&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/value&amp;gt;&lt;/span&gt;
    [Required(ErrorMessageResourceType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(AuthenticationModelsResource),
        ErrorMessageResourceName = &lt;span class="str"&gt;"NewPasswordRequiredMessage"&lt;/span&gt;)]
    [StringLength(100, ErrorMessageResourceType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(AuthenticationModelsResource),
        ErrorMessageResourceName = &lt;span class="str"&gt;"PasswordTooShortErrorMessage"&lt;/span&gt;, MinimumLength = 7)]
   &lt;font style="background-color: #ffff00"&gt; [RegularExpression(&lt;span class="str"&gt;@"^.*(?=.*[!@#$%^&amp;amp;*\(\)_\-+=]).*$"&lt;/span&gt;,&lt;/font&gt;
        ErrorMessageResourceType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(AuthenticationModelsResource),
        ErrorMessageResourceName = &lt;span class="str"&gt;"PasswordNotStrongEnoughMessage"&lt;/span&gt;)]
    [DataType(DataType.Password)]
    [Display(ResourceType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(AuthenticationModelsResource), Name = &lt;span class="str"&gt;"NewPassword"&lt;/span&gt;)]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; NewPassword { get; set; }

    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// Gets or sets the confirm password.&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;value&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// The confirm password.&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/value&amp;gt;&lt;/span&gt;
    [DataType(DataType.Password)]
    [Display(ResourceType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(AuthenticationModelsResource), Name = &lt;span class="str"&gt;"ConfirmNewPassword"&lt;/span&gt;)]
    [Required(ErrorMessageResourceType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(AuthenticationModelsResource),
       ErrorMessageResourceName = &lt;span class="str"&gt;"ConfirmNewPasswordRequiredMessage"&lt;/span&gt;)]
    [Compare(&lt;span class="str"&gt;"NewPassword"&lt;/span&gt;, ErrorMessageResourceType = &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(AuthenticationModelsResource),
        ErrorMessageResourceName = &lt;span class="str"&gt;"PasswordCompareErrorMessage"&lt;/span&gt;)]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ConfirmPassword { get; set; }
}&lt;/pre&gt;

&lt;p&gt;The Unit test:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;[TestMethod,TestCategory(&lt;span class="str"&gt;"HomeController"&lt;/span&gt;)]
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; It_Should_Validate_Password_Doesnt_Have_A_Special_Character()
{
    PasswordResetViewModel vm = &lt;span class="kwrd"&gt;new&lt;/span&gt; PasswordResetViewModel(&lt;span class="str"&gt;"match"&lt;/span&gt;, 10)
                            {
                                PasswordResetModel =
                                {
                                    NewPassword = &lt;span class="str"&gt;"test1122"&lt;/span&gt;,
                                    ConfirmPassword = &lt;span class="str"&gt;"test1122"&lt;/span&gt;
                                }
                            };
    ((ChangePasswordModel)vm.PasswordResetModel).OldPassword = &lt;span class="str"&gt;"test1"&lt;/span&gt;;
    &lt;span class="kwrd"&gt;this&lt;/span&gt;.Controller.PasswordReset(vm);

    &lt;span class="rem"&gt;// assert&lt;/span&gt;
    ValidateViewModel(vm.PasswordResetModel, &lt;span class="kwrd"&gt;this&lt;/span&gt;.Controller);
    Should.BooleanAssertionExtensions.ShouldBeTrue(&lt;span class="kwrd"&gt;this&lt;/span&gt;.Controller.ModelState.Values.Last()
        .Errors.Any(e =&amp;gt; e.ErrorMessage == AuthenticationModelsResource.PasswordNotStrongEnoughMessage));
}&lt;/pre&gt;

&lt;p&gt;The ValidateViewModel method:&lt;/p&gt;

&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ValidateViewModel&amp;lt;TVm, TC&amp;gt;(TVm viewModelToValidate, TC controller) &lt;span class="kwrd"&gt;where&lt;/span&gt; TC : Controller
{
    var modelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() =&amp;gt; viewModelToValidate, viewModelToValidate.GetType());
    var validator = ModelValidator.GetModelValidator(modelMetadata, controller.ControllerContext);
    var result = validator.Validate(viewModelToValidate);
    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (var validationResult &lt;span class="kwrd"&gt;in&lt;/span&gt; result)
    {
        &lt;span class="kwrd"&gt;if&lt;/span&gt; (!&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrWhiteSpace(validationResult.MemberName))
        {
            controller.ModelState.AddModelError(validationResult.MemberName, validationResult.Message);
        }
        &lt;span class="kwrd"&gt;else&lt;/span&gt;
        {
            controller.ModelState.AddModelError(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty, validationResult.Message);
        }
    }
}&lt;/pre&gt;

&lt;p&gt;The MVC Unobtrusive Validation library wants a complete match (from the source code):&lt;/p&gt;



&lt;pre class="csharpcode"&gt;$jQval.addMethod(&lt;span class="str"&gt;"regex"&lt;/span&gt;, &lt;span class="kwrd"&gt;function&lt;/span&gt; (value, element, &lt;span class="kwrd"&gt;params&lt;/span&gt;) {
    &lt;span class="kwrd"&gt;var&lt;/span&gt; match;
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;.optional(element)) {
        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;true&lt;/span&gt;;
    }

    match = &lt;span class="kwrd"&gt;new&lt;/span&gt; RegExp(&lt;span class="kwrd"&gt;params&lt;/span&gt;).exec(value);
    &lt;span class="kwrd"&gt;return&lt;/span&gt; (match &amp;amp;&amp;amp; (match.index === 0) &amp;amp;&amp;amp; (match[0].length === value.length));
});&lt;/pre&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt; &lt;img src="http://geekswithblogs.net/Aligned/aggbug/152802.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Aligned</dc:creator>
            <guid>http://geekswithblogs.net/Aligned/archive/2013/04/26/mvc-validation-of-a-password-with-a-regular-expression.aspx</guid>
            <pubDate>Fri, 26 Apr 2013 16:16:53 GMT</pubDate>
            <wfw:comment>http://geekswithblogs.net/Aligned/comments/152802.aspx</wfw:comment>
            <comments>http://geekswithblogs.net/Aligned/archive/2013/04/26/mvc-validation-of-a-password-with-a-regular-expression.aspx#feedback</comments>
            <wfw:commentRss>http://geekswithblogs.net/Aligned/comments/commentRss/152802.aspx</wfw:commentRss>
            <trackback:ping>http://geekswithblogs.net/Aligned/services/trackbacks/152802.aspx</trackback:ping>
        </item>
    </channel>
</rss>