MVC :: Json Does Not Return Date Properly?
Apr 5, 2010Code like this....
[Code]....
Code like this....
[Code]....
I've created a simple (or what I thought was simple!) search form using Razor, MVC3 and the webgrid from the web helpers. I enabled paging, used a great article I found here to get that working... or so I thought. Basically what happens is that when I click the page buttons at the bottom of the grid it does something that I didn't expect, and creates a JSON object, then the browser prompts me to try and save it, and not as I expected to refill the grid. I can't see what I'm doing wrong, and before I break my monitor by throwing it onto the railway line!
[Code]....
My jQuery code
[Code]....
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication1.Models;
using System.Configuration;
using System.Web.Helpers;
namespace MvcApplication1.Controllers
{
public class SearchController : Controller
{
//
// GET: /Search/
Entities t = new Entities(ConfigurationManager.ConnectionStrings["Entities"].ConnectionString);
public ActionResult Details(int id)
{
Tender_Question q = (from x in t.Tender_Questions where x.Unique_ID_number == id select x).SingleOrDefault();
Customer c = (from cu in t.Customers where cu.CustomersID == q.Company select cu).SingleOrDefault();
ViewBag.Customers = c.CompanyName;
Panel_type pan = (from pa in t.Panel_types where pa.ID == q.Panel_type select pa).SingleOrDefault();
ViewBag.Panel = pan.Panel_type1;
return View(q);
}
[HttpGet]
public ActionResult Edit(int id)
{
Tender_Question q = (from x in t.Tender_Questions where x.Unique_ID_number == id select x).SingleOrDefault();
List<Customer> c = (from cu in t.Customers select cu).ToList();
ViewBag.Customers = c;
return View(q);
}
[HttpPost]
public ActionResult Edit(Tender_Question model)
{
if (ModelState.IsValid)
{
Tender_Question q = (from x in t.Tender_Questions where x.Unique_ID_number == model.Unique_ID_number select x).SingleOrDefault();
q.Answer = model.Answer;
q.Company = model.Company;
q.Customer = model.Customer;
q.Date = model.Date;
q.Page_Question_Ref = model.Page_Question_Ref;
q.Panel_type = model.Panel_type;
q.Question = model.Question;
q.Type_of_tender = model.Type_of_tender;
//add update code
t.SaveChanges();
return RedirectToAction("Index");
}
else
{
return View(model);
}
}
[HttpGet]
public ActionResult Search(int? page)
{
if (page.HasValue)
{
return RedirectToAction("EfficientPaging", new { page = page });
}
else
{
return View();
}
}
[HttpPost]
public ActionResult Search(int? page, FormCollection collection)
{
TempData.Clear();
IEnumerable<Tender_Question> q = getSearch(collection);
TempData.Add("Results", q);
return View(q);
}
private IEnumerable<Tender_Question> getSearch(FormCollection collection)
{
string question;
string answer;
IEnumerable<Tender_Question> q = t.Tender_Questions;
question = collection["Question"];
answer = collection["Answer"];
if (!string.IsNullOrEmpty(question))
{
if (question.EndsWith(","))
{
question = question.Substring(0, question.Length - 1);
} if (question.Length > 0)
{
if (question.Contains(","))
{
string[] questioned = question.Split(',');
foreach (string s in questioned)
{
q = q.Where(m => m.Question.Contains(s));
}
}
else
{
q = q.Where(m => m.Question.Contains(question));
}
}
}
if (!string.IsNullOrEmpty(answer))
{
if (answer.EndsWith(","))
{
answer = answer.Substring(0, answer.Length - 1);
}
if (answer.Length > 0)
{
if (answer.Contains(","))
{
string[] answered = answer.Split(',');
foreach (string s in answered)
{
q = q.Where(m => m.Answer.Contains(s));
}
}
else
{
q = q.Where(m => m.Answer.Contains(answer));
}
}
}
return q;
}
[HttpGet]
public ActionResult EfficientPaging(int? page)
{
IEnumerable<Tender_Question> q = (IEnumerable<Tender_Question>)TempData["Results"];
int skip = page.HasValue ? page.Value - 1 : 0;
q = q.OrderBy(o => o.Unique_ID_number).Skip(skip * 10).Take(10).ToList();
var grid = new WebGrid(q);
var column = new WebGridColumn();
column.CanSort = false;
column.ColumnName = "Unique_ID_number";
column.Header = "Edit";
column.Format = (item) =>
{
return new HtmlString("<a href="/Home/Edit/" + column.ColumnName + "">Edit</a> ");
};
var detcolumn = new WebGridColumn();
detcolumn.CanSort = false;
detcolumn.ColumnName = "Unique_ID_number";
detcolumn.Header = "Details";
detcolumn.Format = (item) =>
{
return new HtmlString("<a href="/Home/Details/" + column.ColumnName + "">Details</a> ");
};
var htmlString = grid.GetHtml(htmlAttributes: new { id = "DataTable" }, columns: grid.Columns(
column, detcolumn,
grid.Column("Question"),
grid.Column("Answer"),
grid.Column("Company"),
grid.Column(columnName: "Type_of_tender", header: "Type of Tender"),
grid.Column(columnName: "Panel_type", header: "Panel type"),
grid.Column(columnName: "Page_Question_Ref", header: "Page Question Ref"),
grid.Column("Date")
));
return Json(new
{
Data = htmlString.ToHtmlString(),
Count =q.Count() / 10
}, JsonRequestBehavior.AllowGet);
}
}
}
I have a controller that uploads a file. I would like to return a json result with bool success (if successfully uploaded otherwise false) and message (this could be error message that occured OR link to a file OR link to an image, depending on what was uploaded).What's the best way to approach thisI have this
public class UploadedFile
{
public bool Success { get; set; }
public string Message { get; set; }
}
then In my controller I would set Success to true/or/false and Message to <a href OR <img am i on the right track?How would i then parse this in the view so that when image it will show an image, if link show a link, if error simply alert error.
i use JSon to return allot of results when building a website, but find myself writing a a lot of code like this:
[Code]....
and then simply call this function with whatever IEnumerable results i have my question is would i be on the right lines here, what would be the best possible way to do this as it makes no sense to be writing in MVC and OOP but to keep rewriting code to just FROM ?
[code]....
What's wrong?
Edit: And what if I need to return {Message:'',Type:1} ?
Edit2: The answer for the last one is: I can return a Dictionary<string, string>
I have Categoreis and Locations I would like return both in one method. How can make a use of both Categories.ToList() and Locations.ToList()? What type of object should I return?
View 1 RepliesCode:
public partial class _Default : System.Web.UI.Page
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static LoanSize[] GetLoanSize()
[Code] ....
This is how i read it in client size
Code:
function GetLoanSize() {
$.ajax({
type: "POST",
url: "Default.aspx/GetLoanSize",
data: "{}",
contentType: "application/json; charset=utf-8",
[Code] ....
My only problem is that it take too long to populate the dropdown. How to convert it into a JSON format so it will more faster populating the data.
I am using an AJAX.Net to call an ASP.Net PageMethod, which returns JSON serialized JSON data
{"d":"[{"Fromaddress":"testfrom1@test.com","Toaddress":"testto1@test.com"},{"Fromaddress":"testfrom2@test.com","Toaddress":"testto2@test.com"}]"}
The Response Header states the content type as
"Content-Type application/json; charset=utf-8"
However, the data is just available as a string, and does not seem to be available as JSON data from javascript. What do I need to do to work with the returned data as JSON from javascript?
I have an ajax call handled with jquery like this:
[code]....
Nothing's being outputted. What am I missing?
I am new to MVC and am trying to join 2 SQL tables together and return them in a Json. One table is OutreachProgram. The other table is UserInfo. I want to return the rows from the OutreachProgram table that match on CenterID with the UserInfo table.
The code that exists now will pull all rows from the OutreachProgram table. I can't figure out how to add the UserInfo table to the query to make it work.
JsonGrid <OutreachProgram> grid =
new
JsonGrid<OutreachProgram>(db.OutreachProgram,
new
OutreachProgramFilter());
public Array GetItems(IQueryable<OutreachProgram>
source)
{ return (from r
in source.AsEnumerable()
select
new {
ID = r.OutreachProgramID, CenterID = r.CenterID, DateOutreachProvided = r.DateOutreachProvided.ToShortDateString(),
NameOfProvider = r.NameofProvider.ToString(),
}).ToArray();
}
I want to return an array of javascript objects from my asp.net asmx file. ie.
variable = [
{
*value1*: 'value1',[code]....
I seem have been having trouble reaching this. I'd put this into code but I've been hacking away at it so much it'd probably do more harm than good in having this answered. Basically I am using a web service to find names as people type the name. I'd use a regular text file or something but its a huge database that's always changing - and don't worry I've indexed the names so searching can be a little snappier - but I would really prefer to stick with this method and just figure out how to get usable JSON back to javascript. I've seen a few that sort of attempt to describe how one would approach this but I honestly think microsofts articles are damn near unreadable.
EDIT: I'm using the $.ajax() function from jQuery - I've had it working but it seems like I was doing it in bad practice not returning and using actual JSON. Previously I'd take a string back and insert it into html to use the variable it set - very roundabout.
Microsoft Ajax can expose webservices which respond with json or xml depending on configuration. I would like to mock these services using soap ui. Using the wsdl I can do this to mock the services in the case where xml is returned, however how can I mock the response when JSON is returned?
View 1 RepliesI 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.
How to return values from Webmethod to the client in JSON format? There are two static int values that i want to return.Do I need to create new object with those 2 properties and return it?The GetStatus() method is called frequently and i don't like the idea of creating a special object each time just for json formatting...
[WebMethod]
public static int GetStatus()
{
int statusProcess,statusProcessTotal;
Status.Lock.EnterReadLock();
statusProcess=Status.Process; //Static field
statusProcessTotal=Status.ProcessTotal; //Static field
Status.Lock.ExitReadLock();
return ...
}
On client side I catch the return value in :
function OnSucceeded(result, userContext, methodName)
(PageMethods.GetStatus(OnSucceeded, OnFailed);)
I'm trying to return an error page indicating that the user couldnt be found and therefore I throw a HttpException with status code 404, however for some reason it wont redirect to the error page? - Is there some sort of trick to handle error pages with JSON that I should be aware of? My current code:
public ActionResult Details(int id)
{
User userToGet = _session.Query(new GetUserById(id));
if(userToGet == null)
{
throw new HttpException(404, "User not found");
}
DetailsUserViewModel userToViewModel = AutoMapper.Mapper.Map<User, DetailsUserViewModel>(userToGet);
return Json(new
{
HTML = RenderPartialViewToString("Partials/Details", userToViewModel)
}, JsonRequestBehavior.AllowGet);
}
Update - Some more code:
// MyJs.js
function openBox(object) {
$("body").append("<div id='fadeBox'></div><div id='overlay' style='display:none;'></div>");
$("#fadeBox").html("<div style='position:absolute;top:0;right:0;margin-right:2px;margin-top:2px;'><a id='closeBox' href='#'>x</a></div>" + object["HTML"])
$("#fadeBox").fadeIn("slow");
$('#wrapper').attr('disabled', 'disabled');
$("#overlay").show();
jQuery.validator.unobtrusive.parse('#mybox') /* Enable client-side validation for partial view */
}
// List.cshtml
@model IEnumerable<MyDemon.ViewModels.ListUsersViewModel>
<table style="width:100%;">
<tr style="font-weight:bold;">
<td>UserId</td>
<td>UserName</td>
</tr>
@foreach (var user in Model)
{
<tr>
<td>@user.UserId</td>
<td>@user.UserName</td>
<td>@Ajax.ActionLink("Details", "details", "account", new { id = @user.UserId }, new AjaxOptions() { HttpMethod = "GET", OnSuccess = "openBox" })</td>
</tr>
}
</table>
Just ramping up on JSON and JQuery and returning data to a ASP.NET web page from a web service using Ajax. The JQuery part is pretty straight-forward. However, when trying to return JSON formatted data instead of XML from a 2.0 web service, I'm stuck. The web service does have the System.Web.Script.Services.ScriptService attribute, so I can hit it via JavaScript; however, the web service always...always...returns data in XML format, no matter if I explicitly say I want JSON as the datatype in my JQuery code. So I don't know if this is an issue with the web service or the JQuery code. I posted this here, but realize that the category could be incorrect depending on where the issue is. Is there no way to return JSON data from a 2.0 web service? It's a production web service, so I can't change the code unfortunately.
View 3 RepliesIn ASP.Net MVC action methods can return json objects simply by returning something like so:
JSon([whatever])
How do I return a JSon representation of say List<String> with webforms either through a service or through a method in the code behind of an aspx page? This seems incredibly confusing compared to ASP.Net MVC.
I am using .Net Framework 4.0 along with Asp.net C# and using Jquery with Ajax for retrieving data but medium is used name as JSON So whenever we retrieve date from database using JSON its show in this format /Date(1297246301973)/. How can i convert this into as normal date like (mm/dd/yyyy)?You better understand like this.My input Date is : 14/2/2011 My output Date is : /Date(1297246301973)/
View 4 RepliesI was using Extjs to send a json object to my asp.net webservice/Update method , but I find the following error in firebug reseponse.
[Code]....
I'm integrating jquery fullcalendar into my application.
Here is the code i'm using:
in index.aspx:
[Code].....
I am trying to return some data as json from an action method.
I have an employee object that looks like this:
public class Employee
{
public int EmployeeID {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
//Other irrelevant properties
}
Then I have a view model as follows
public Class EmployeeViewModel
{
public Employee Supervisor{get; set;}
public List<EmployeeViewModel> Employees
}
I need to return a json object that looks exactly like this:
{id: 1, name: John, children: [
{id: 1, name: Joe, children: []},
{id: 1, name: Rob, children: []}
]}
For now I only need to go to the second level as above, returning and supervisor and their staff members beneath them.
How would I go about returning this in my action method(I have the viewModel object hydrated already I just need to return it as json). My problem so far has been that the children property does not get populated.
After much head scratching as to why my returned Json string is breaking JSON.parse, I have realized that it is the returned dates that it doesn't like.
.net property:-
[code]....
I'm having a very hard time wrapping my head around this problem (it might be the heat from the summer finally arriving).
Problem:
I want the user to press a button client side which performs javascript data preparing and at last send a JSON structure to (currently a asmx webservice on) the server. The JSON structure is several levels deep.
Server side I create a PDF file which I want to send back to the user.
Goal:
The user feeling is that she presses a button and expects a PDF to return to her - either in a new window or as a download (preferrable).
Tools:
The system consists of (client side) HTML, JavaScript and ExtJS and (server side) ASP.NET.
Normally I would use an ashx handler to return a file to the client, but can I send a JSON structure to the handler and still be able to parse it correctly server side?
I am searching for the pattern to use.
I have the following web method , no success on return a correct Json format.
[Code]....
GetAll() return list of type "Company" POCO classes.
The web method complaint type "Company" could not cast to object. However I could not just return the Company type because client side Json only accept its 2 properties -"CompanyName", "ID" and I want to keep it that way.
Of cause, I had tried create a CompanyDTO which only have those two properties, but same error - "Unable to cast object of type..."
How should I modify in my web method to make it able to return a list of partial "Company" type in Json format?
how would i go about returning a generic list in json format, can anyone point me to any good examples.
View 2 Replies