If I have a controller and I want to return a view based on what my conditional logic goes to, is that possible? I have different types of models that i want to insert into a view DEPENDING on my conditional logic (if statements) Can i do this? and how would I do this
I have an application that has an public 'end user' mode and a 'back office' mode. Both 'modes' pretty much share the same controller logic but the user interfaces for these different 'modes' are radically different. Using the out of box default routing that you get when a project is created for the first time I have something like the following:
Controllers HomeController.cs Views BackOffice Index.aspx Public Index.aspx Shared BackOfficeSite.Master PublicSite.Master In my HomeController.cs I have logic that looks like this: public ActionResult Index() { var devices = DeviceRepository.FindDevicesByCustomer(100); if(IsBackOffice()) { return View(@"~/Views/BackOffice/Index.aspx", devices); } return View(@"~/Views/Public/Index.aspx", devices); }
Is this the correct way to be doing this or am I digging myself an anti-pattern hole? I'm using ASP.NET MVC 2.
my MVC2 delete and only my delete controller is refusing to return any class information. Its really similar to my edit function and the views are all auto-generated so I don't see the problem.
Function Delete(ByVal id As Integer) As ActionResult
I am trying to read the response of ResultView in the action of some controller. I need to process the response before returning the ResultView. I am trying the following code:
[Code]....
Whenever I read writer, I get empty string though no exceptions occur.
I have two views which will both use the same Controller method:
//webServiceController.cs
//The actual method is about 40 lines of code. Truncated for readability. public ActionResult Index() { object i = new List<WebServiceMethod>(); [code].....
The second view is a quick'n'dirty conversion to JSON so that I can do magical AJAX tricks with the data:
<% // AjaxGetServiceData.aspx
// Convert web service response object into JSON for AJAX. var jss = new System.Web.Script.Serialization.JavaScriptSerializer(); Response.Write(jss.Serialize(Model));
%>
I'd created a duplicate of the Index() method and called it AjaxGetServiceData(), but that defeats the purpose of MVC.
Resolution:I didn't ask my question very well, as evidenced by a 5-10 minute discussion I just had with a coworker about this very topic. He kept asking me the same question that many users on this page asked me: "How does the controller know which view to return?" I responded, "That's what I'm trying to figure out." I was trying to get the method to return a different view (or Json output) when AJAX was the requester. A string argument in the method was my solution.
This is what I ended up using to get my desired effect:
public ActionResult Index(string isJSON = "no") {
/// ...All the code from before...[code]....
Then, when I want the JSON version, in my AJAX request I specify the URL as /MyController/Index/?isJSON=yes When I want my pretty table view, I just use /MyController/
my controller, I'm generically deserializing Xml. The object being deserialized to could end up being any number of different types. This, of course, won't be known at compile time. I've created a number of partial views, each of which are strongly typed to a different object that is a possible outcome of the Xml deserializaton.My problem is that I'm struggling with a good way to return the right view. I could always switch on some property in the object, or use a Key/ViewName Dictionary mapping to get the right view name, but I was hoping for something a little more generic than that.Does anyone know of a way that I could implicitly say, "return the view that is typed off of the object I have."?
I have a controller with several actions that all return a set of data that's the same among them all. Instead of adding the data to the ViewBag in every single action, is there some pattern or attribute or something I can call or set to add the same data to the viewdata or viewbag for every action, or some other better way to perform the get the same data in every view without calling the method in every action?
i am trying return a double value from controller action. when i alert(result) it works well but when i return a function it did not work. alert undefined value.
//this is action public ActionResult GetPrice(int id) { double price = ProductList.Where(d => d.ID.Equals(id)).Single().Price; return Json(price, JsonRequestBehavior.AllowGet); }
I am fairly new to MVC and just trying to achieve something which I think shouldn't be too complicated to achieve. Just want to know what the best approach for that is. I have an Event-RSVP application (NerdDinner kind) where you go to view details of the event and then click on an AJAX link that will RSVP you for the event.
<% if (Model.HasRSVP(Context.User.Identity.Name)) { %> <p>
You are registered for this event!
<%: Ajax.ActionLink("Click here if you can't make it!", "CancelRegistration", "RSVP", new { id = Model.RSVPs.FirstOrDefault(r => r.AttendeeName.ToLower() == User.Identity.Name.ToLower()).RSVPID }, new AjaxOptions { UpdateTargetId = "QuickRegister"}) %> </p> <% } else { %> <p>................
I have a list of items(surveys) displayed on my home page. When I click the edit button for a particular item I have a modal pop up with the items details to edit. When the user clicks Save I submit the form via ajax. Depending on whether ModelState.IsValid == true I want to update the modal with validation information or close the modal and update the list of items with the new information.
This is how I am submitting the form:
[Code]...
My Questions
The only thing I can think to do is return JSON from my controller with a flag indicating the state of the ModelState.IsValid and the corresponding partial that I should show.
1) How would I do this?
2) Is there a better way?
Update
I found this: [URL]
but it seems more likely that I am going about the whole thing incorrectly.
display the first tier of data so the user can select and tweak desired rows. On occasion, they will want to drill into a row to see the children and select/tweak them. After a tweaking session, I wanted to be able to commit.
If I build an aggregate ViewData and prepopulate it, I can display it just fine in the View, and I get the collection back in the postback just fine.
Starting with empty child data, I experimented with jscript to fetch that data and displayed it by adding elements with jquery.
What I can't figure out how to do is to return that data to the controller. The newly added elements aren't in "Show Source" ... I heard elements added via jscript are not posted back. I even tried adding items to a prepopulated list ... only those items originally passed in are returned.
How does a controller action return an HTML stream as the View? ( in place of the name of the View file )
I want to return a simple "error detected" or "action completed" page to the browser. And I dont want to clutter up my project with yet another view. The return string being "<html><body><h1>Error. Customer xxxx is not found</h1></body></html>"
( thinking about it, better to have a general purpose view in a folder named "Common". Then pass the message text in ViewData. Still curious to know how to return an html stream. )
Curious what the best practice is for returning errors to a view from a controller where the error isn't really a validation error, but more like "user not found" or "service timeout" type of errors. (in ASP.NET MVC2 framework)
I've been adding them to the ModelState's model errors, but that doesn't seem appropriate. (although easy to implement and maintain)
Example - A user tries to log in, and their credentials do not match a known user.
How can I add a sub folder within the Views folder for a controller?
I have a controller named "admin". In the Views folder, there is an "admin" folder.
The admin controller has a number of actions. For each group of actions, there is a partial class that contains the actions of the group. admin/reports, admin/inventory, admin/orders, ... Problem is, when I move the "ReportsIndex.aspx" view into folder Views/Admin/Reports, MVC says it cant find the view when the ReportsIndex action method does a "return View("ReportsIndex", model) ;".
UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development, that follows the UP(Unified Process). It uses a Grasp Controller pattern to interact with domain classes by some methods like NewSale(), AddNewItemToSale() and CloseSale. In windows form, I can instantiate a object of this class in the UI and then use its methods to perform the actions. This works well in Client apps, but when I use asp.net mvc, I cannot find a way to instantiate an object (one for each user) that was always visible for a Controller (MVC). I cannot insert as an attribute inside Controller because it always create a new one.
I am learning MultiView control.Here are question:I added 5 views in the MultiView but all views are tight together. I can not drag and drop another control such as text boxes or labels into view area.
I have an MVC view that contains a number of partial views. These partial views are populated using partial requests so the controller for the view itself doesn't pass any data to them. Is it possible to reload the data in one of those partial views if an action was triggered in another? For example, one partial view has a jqGrid and I want to refresh the data in another partial view when a user selects a new row in this grid. Is there a code example for this scenario (in C#) that I can look at to see what am I doing wrong? I am using ajax calls to trigger a new request but non of the partial views are refreshed so I am not sure if the issue is with the routing, the controller,
I have a simple model where a Person has Gifts. I have a view which is a list of Gifts belonging to one Person.
My problem is with the Create action for a new Gift. I want it to default to the PersonID that we are already viewing the list of Gifts for. I tried simply passing the last PersonID (they are all the same)
Html.ActionLink("Create New", "Create", new { id = Model.Last().PersonID }) which works fine if there is already at least one Gift for that person but if this is the first Gift I don't have a value.
My Gift List controller knows the PersonID I want to pass but the view doesn't.
How do I pass this PersonID from my Gift List controller to my Gift Create controller via the Gift List view? Or is there a better way to do this?
I have a filter on my MVC web site. I display some records in a few different controller actions but when moving from one action to another I want to apply those filter values.
How can I persist values from controller to controller?
Should I use Session? TempData?
I am using Structure Map for IOC.
Maybe I could have a class that contains a Property for each Session Value that I use in my application and inject it on the controllers that need session?