MVC :: Trying To Setup A Base Product Class That Will Be Inherited By A More Specific Class Later?
Dec 16, 2010
In my MVC project, I am trying to setup a base product class that will be inherited by a more specific class later. Here is my scenario. I have a table called ProductBase, it contains three fields, BaseProductId(PK), CatalogNum, and ListPrice. Every product in the system will share these attributes. Next, I have a table called Shirt, with three fields BaseProductId(PK, FK), Color, and Size.
I then setup an Entity Data Model that pulled in both of these tables and created classes BaseProduct and Shirt. So, in my model, I want to do something like this:
[Code]....
The main problem I have with this, is that if I do any kind of condition on CatalogNum or ListPrice, then my performance goes to crap. One of the main things we will want to do is something like this:
[Code]....
This takes an enormous performance hit, and I suspect it is because the partial class above returns to the database for each shirt.
The other problem I have with this approach, is that I cannot force the properties for the Shirt. What if I make a change to the BaseProduct? What happens when I have multiple product types, will I have to repeat this code? I assume I will need to make a change with the entity data model, but I am unsure where to begin.
Since we can access the private data member of base class in the derived class with the help of friend function. How can we do the same in C# asp.net? I mean whats the alternative of friend function in C# asp.net
Using the following Webservice definition using aClientArgs as a complex type:
[System.Web.Script.Services.ScriptService] public class Controller : System.Web.Services.WebService { [WebMethod] public void save_client(aClientArgs client) { // Save client data } } Then defining aClientArgs as a sub-class: public class aArgs { public string id = null; public string name = null; } public class aClientArgs : aArgs { public string address = null; public string website = null; } Returns the following WSDL fragment for the save_client args: <save_client xmlns="http://tempuri.org/"> <client> <address>string</address> <website>string</website> </client> </save_client> When I'm expecting the following: <save_client xmlns="http://tempuri.org/"> <client> <id>string</id> <name>string</name> <address>string</address> <website>string</website> </client> </save_client>
So it appears that the .NET WebService is not treating inherited properties as arguments/variables for purposes of a web service. How do I get .NET to also use the properties of the base class?
I'd like to inherit all my controllers from a custom base class that I write myself. I can change the line every time I add a new controller, but it would be nicer if I could somewhere specify the default value that gets set there. That way I wouldn't need to worry about forgetting this, and other people who get added to the project later on would have an easier time.
I am new in asp .net.I am not able to undestand why we call base class method when we override methods/events.Like automatically visual studio will put base.OnInit() if you are overriding OnInit.
I've inherited (no pun intended) an old ASP.NET 1.1 project that is now .NET 3.5. It is designed with base class that inherits from PageBase. All of the subsequent aspx pages inherit from this custom pagebase. It currently works by generating a bunch of html text in LiteralControls for the headers and navigation bars and dropping it into an HtmlGenericControl (in this case called 'page'), which is then displayed on the page by using this.Controls.Add(page); This actually works, except for the following output:
<span> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> ... </html> </span>
Those span's aren't supposed to be there obviously, but they come from the HtmlGenericControl, which defaults to a tagName of span. This is causing some strange behavior in IE regarding centering controls on the page.
Basically I know I should be using masterpages for this type of thing, but I don't have time to switch this all over, and I'm not an ASP.NET expert yet to where I know exactly how to solve this problem. Is there another way of sending literal text directly to the HTML output without wrapping it in a control? Obviously I need the DocType to be the first thing on the page; nothing wrapping it.
I'm refactoring an old website that has product search code littered throught the codebehind. I'm trying to encapsulate the search logic into its own class so I've created a Product class with a Search() method. I would like some suggestions about OO best practices so that the class is reusable and maintainable. The questions I have are:
- Should I make the search() method an instance method or make it static? For now the class is just really there to encapsulate my search logic
- If I make it an instance method should it return a list of products or should it populate a member property that I can access like p.Search(); var x = p.ProductList;
- The search method requires upward of 7 parameters of different types, what's the best way to provide them? - pass them all i.e. p.Search (param1, param2, ..., param7) - create a SearchParams structure in the class, populate it and pass that i.e. p.Search(searchParams) - Instantiate a Product object and set properties on it that are used by the Search method i.e. p.ID = 123; etc.... p.Search();
I've used variations of the above before but would like to know what's the best way.
When you create a webpage in ASP.net, the codebase inherits System.Web.UI.Page
Now when I extend the page object to check for SessionExpired for example, I create a new class and inherit from system.web.ui.page, and overwrite some functions.
The problem then is that on each page, I have to replace system.web.ui.page with my custompage class.
Is there a way to extend a class by adding methods or modifying its methods directly (e.g. add the sessionExpired check to System.Web.UI.Page) ?
I've got an ASP.NET application that I installed by creating a web setup. I ran into a problem where ASP.NET wasn't registered with IIS so it gave me a "installation was interrupted" message that told me exactly nothing. Anyhow, I finally got it installed, and I can access the main page, but it's telling me that my class isn't defined. The dll is in the same directory as the Default.aspx page
Here's the main error information
Compiler Error Message: BC30002: Type 'SIValidator.SIValidator' is not defined.
Source Error:
Line 4: Line 5: <script runat="server"> Line 6: Dim validator As New SIValidator.SIValidator() Line 7: Protected table As New arrayList() Line 8: Protected countyByDistrict As New Hashtable()
Version Information: Microsoft .NET Framework Version:2.0.50727.1873; ASP.NET Version:2.0.50727.1433
Am I doing it wrong? Is there some obscure setting that may not be set? I'm completely new to this VS deployment deal.
edit: As an aside, when I searched google 5 minutes later, this entry came up as the first result.
I want to add a custom base class for all of my web forms. I created a "App_code" folder in my asp.net web project and add a simple base page class like this:
namespace MySite.Web { // base page for all the pages that need localization public class LocalizationPage : System.Web.UI.Page { protected override void InitializeCulture() { base.InitializeCulture(); } } }
And then I try to let asp.net web form to inherit from this base page. I have something like this:
using MySite.Web;
namespace MySite.Public { public partial class RegisterPage : LocalizationPage { } }
Now I run into problem where Visual Studio doesn't recognize the LocalizationPage class I created. On the above code snippet, LocalizationPage is not highlighted as a class. And when I try to compile, I got the following error message:
Error 1 The type or namespace name 'LocalizationPage' could not be found (are you missing a using directive or an assembly reference?)
Is it possible for a Controller Base class to access a parameter from an action link and if so how do I access that parameter within my Base Controller?
Action Link:
<%=Url.Action("Area_1419", "Home", new { SectionId = 1})%>
Base Controller Class:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Website.Models; namespace Website.Controllers { public abstract class CategoriesController : Controller { public CategoriesDataContext _dataContext = new CategoriesDataContext(); public CategoriesDataContext DataContext { get { return _dataContext; } } public void SectionID() { int SectionID = Convert.ToInt32(Request.QueryString["SectionID"]); ViewData["SectionID"] = SectionID; } public CategoriesController2() { //ViewData["Categories"] = from m in _dataContext.Categories where m.Area_ID == SectionID select m; //ViewData["Categories"] = from c in DataContext.Categories select c; } } }
HomeContoller
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Website.Models; using Website.ActionFilters; namespace Website.Controllers { [HandleError] public class HomeController : CategoriesController { public ActionResult Index() { return View(); } public ActionResult About(int? SectionID) { //ViewData["Message"] = SectionID; return View(); } public ActionResult Area_1419(int SectionID) { return View(); } public ActionResult Admin() { return View(); } } }
I have an asp.net usercontrol (ascx) that inherits from an abstract class (that inherits from a UserControl). My Project is in a 3-tier architecture (DAL -> Bll -> UI/Views). Currently there are no class files in the UI layer (other than the code-behinds). Which layer should I add this abstract class to?
First off, I am wondering if this is possible. I read slight grumblings around the internet about this, but I was not entirely sure.
My scenario: I have a base chart class which has some methods which all charts should have.
public partial class BaseChart : System.Web.UI.UserControl { public BaseChart() { } public void ToggleLegend() { Chart1.Legends[0].Enabled = !Chart1.Legends[0].Enabled; } }
There is also some mark-up for this BaseChart -- setting background colors, etc. All charts which inherit BaseChart should use this starting mark-up and be able to build upon it.
I would then like to do this:
public partial class HistoricalLineChart : BaseChart { public HistoricalLineChart() : base() {
I am successfully injecting base class properties with spring.net with just a class that inherits from a base abstract class. Lets say Class MyClass : MyBase, and I am successfully setting a property like this:
Where MyBaseClassProperty is a property on the base class. Now I have another abstract class between the old base class and the instantiable class and I am trying to set properties on both the abstract classes. So MyClass : MyNewBaseClass and MyNewBaseClass : MyBaseClass. I have an additional property on the new base class (MyNewBaseClassProperty) and I am trying to inject it like this:
The property on the old base class is being injected but the one on the new one is not - and I am not getting an error or anything (so I am pretty sure my config is good), that property is just null! I am on asp.net (not MVC) and the class MyClass is a user control (ascx).
I have the following PerformanceFactsheet.aspx.cs page class
public partial class PerformanceFactsheet : FactsheetBase protected void Page_Load(object sender, EventArgs e) // do stuff with the data extracted in FactsheetBase divPerformance.Controls.Add(this.Data); where FactsheetBase is defined as public class FactsheetBase : System.Web.UI.Page [code]...
In my controller have a FormViewModel which inherits from a domain class declared in dbml. In the constructor of the FormViewModel I want to do a shorthand assignment to the inherited class properties with the passed in object (ie thisPerson) without iterating through each property of the inherited class and assigning its value with corresponding property in the passing in object. Should I use super, base, this, or something else?
I'm trying to have all my views inherit from a custom class so that I can add certain behaviour and values to all pages, but I'm having some issues. I tried subclassing System.Web.Mvc.WebViewPage but I'm forced to implement an Execute procedure that I don't know what it should do. Also, if I try to access the Context variable, I get a null reference (really weird). This leads me to think that I may have the wrong base class.
We have a base class that all our webpages in our application inherit from. I have a static method in the base class which when called will clear values from the application cache. Now the issue is this method needs to be triggered from a source outside the current application. I there any way this can be accomplished without creating an aspx page that will call this base method on page load.
EDIT: And I'm a moron. I had copied the gridview and was calling a RowDataBound event handler for a different grid... Sorry to have wasted everyones time, but there is some good info here regardless if anyone has the same question. In the end, the public properties of the base class are binding correctly.
I've tried setting the <pages pageBaseType="DynamicWebPage" /> value in web.config, but when I response.write out the page type, I'm still getting Microsoft.WebPages.WebPage.
I'm simply trying to sub-class WebPage and add some additional functionality such as a dynamic PageData dictionary similar to Phil Haack's dynamic ViewData dictionary.