- Details
- Written by: Stanko Milosev
- Category: ASP.NET
- Hits: 7160
Just start your application without debugging:

Then just attach to process as you debug normally IIS (w3w9.exe)
- Details
- Written by: Stanko Milosev
- Category: MVC 4
- Hits: 5788
I had XML like this:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfmyNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<myNode>
<Name>Echo one</Name>
<Category>Reporting</Category>
<Id>1</Id>
<Workflow>
<Application>Reporting</Application>
<Name>EchoOne</Name>
<Configuration>
<ConfigItem>
<Key>ReportSuccessToAddress</Key>
<Value>echoOneSuccess - at - echoone.com</Value>
</ConfigItem>
<ConfigItem>
<Key>ReportErrorToAddress</Key>
<Value>echoOneError - at - echoone.com</Value>
</ConfigItem>
<ConfigItem>
<Key>ReportSuccessCcAddress</Key>
<Value>echoOneSuccessCc - at - echoone.com</Value>
</ConfigItem>
</Configuration>
</Workflow>
</myNode>
<myNode>
<Name>Echo two</Name>
<Category>Reporting</Category>
<Id>2</Id>
<Workflow>
<Application>Reporting</Application>
<Name>EchoTwo</Name>
<Configuration>
<ConfigItem>
<Key>ReportSuccessToAddress</Key>
<Value>echoTwoSuccess - at - echoone.com</Value>
</ConfigItem>
<ConfigItem>
<Key>ReportErrorToAddress</Key>
<Value>echoTwoError - at - echoone.com</Value>
</ConfigItem>
<ConfigItem>
<Key>ReportSuccessCcAddress</Key>
<Value>echoTwoSuccessCc - at - echoone.com</Value>
</ConfigItem>
</Configuration>
</Workflow>
</myNode>
</ArrayOfmyNode>
Instead of - at - should be @, I am having problems with spambot protection :)
And I wanted to extract all e-mails from ReportSuccessToAddress, ReportErrorToAddress and ReportSuccessCcAddress nodes.
Model I implemented as array in my view:
@model PlayingWithXmlInAspMvc.Models.PlayingWithXmlModel[]
Then I had to load XML from file:
XElement linqMyNodes = XElement.Load(Request.Url.AbsoluteUri + "PlayingWithXml.xml");
If you need to load XML from string, then use parse.
I have selected all myNode nodes in the XML:
IEnumerable<XElement> myLinqNodes = from myNodes in linqMyNodes.Elements("myNode") select myNodes;
After that in controller I have created model like:
PlayingWithXmlModel[] myModel = new PlayingWithXmlModel[myLinqNodes.Count()];
Extract every ConfigItem element for each myNode:
foreach (var myLinqNode in myLinqNodes)
{
myModel[i] = new PlayingWithXmlModel();
var Configurations = from configuration in myLinqNode.Elements("Workflow").Elements("Configuration").Elements("ConfigItem")
select configuration;
}
In previous line there is myModel[i] = new PlayingWithXmlModel(), which means that for every item in array you have to create object, in my case model.
Now I need to extract addresses from Configurations:
foreach (var Configuration in Configurations)
{
if (Configuration.Element("Key") != null)
{
switch (Configuration.Element("Key").Value)
{
case "ReportSuccessToAddress":
myModel[i].ReportSuccessToAddress = Configuration.Element("Value").Value.Replace(" ", string.Empty);
break;
case "ReportErrorToAddress":
myModel[i].ReportErrorToAddress = Configuration.Element("Value").Value.Replace(" ", string.Empty);
break;
case "ReportSuccessCcAddress":
myModel[i].ReportSuccessCcAddress = Configuration.Element("Value").Value.Replace(" ", string.Empty);
break;
}
}
}
Where .Replace(" ", string.Empty) I needed to delete spaces in values.
On the end I will send model to my view like:
return View(myModel);
This article is just to show few examples of LinqToXml and passing model as array to the view. One small example you can see here.
- Details
- Written by: Stanko Milosev
- Category: MVC 4
- Hits: 5822
After creating controllers, for instance, like in example which I described here, and you want to "extend" index controller with additional parameter, then you have to introduce new router. In my case, in RouteConfig.cs (\MasterDetailDataTables\MasterDetailDataTables\App_Start\RouteConfig.cs) I did something like this:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//routes.MapRoute(
// name: "Default",
// url: "{controller}/{action}/{id}",
// defaults: new { controller = "MasterDetail", action = "Index", id = UrlParameter.Optional }
//);
routes.MapRoute(
name: "MasterDetail",
url: "{controller}/{action}/{category}",
defaults: new { controller = "MasterDetail", action = "Index", category = UrlParameter.Optional }
);
}
As you can see, I commented default one, and added new one, where instead id I wrote category. Also in this line:
defaults: new { controller = "MasterDetail", action = "Index", category = UrlParameter.Optional }
Category is bold because I already forgot to change it in there part as well :)
From here.