Button Click is not calling an Action - c#

When I click the Post button I want to add a message to my database but now it is not working. When I click the button nothing happens and the AddMessage Method in my Home Conroller never gets called. DO you happen to know why?
Chat View:
#{
ViewBag.Title = "Chat";
}
<h2 id="current-chat">General Chat</h2>
<div id="wrapper">
<div id="upper-wrapper">
<div id="available-rooms-dialog">
</div>
<div id="add-delete-room">
<input type="button" onclick="GetRoomName()" id="createroom" value="Create Room" />
<input type="button" onclick="DeleteRoom()" id="deleteroom" value="Delete Room" />
<form id="ava-rooms">
</form>
</div>
<div id="discussion-dialog">
<textarea rows="30" cols="50" id="discussion"></textarea>
</div>
</div>
<div id="message-dialog">
<textarea rows="3" id="message">Type your message</textarea>
<br/>
<input type="button" id="sendmessage" value="Post" />
<input type="hidden" id="displayname" />
</div>
</div>
#section scripts
{
<script src="~/Scripts/jquery.signalR-2.0.2.min.js"></script>
<script type="text/javascript">
var json;
var currentRoomId;
setInterval(LoadRoomMessages(currentRoomId), 6000);
$(function () {
LoadRooms();
// Reference the auto-generated proxy for the hub.
var chat = $.connection.chatHub;
// Create a function that the hub can call back to display messages.
chat.client.addNewMessageToPage = function (name, message) {
// Add the message to the page.
//===========================================================
//===================THIS LINE DIDNT DO SHIT=================
$.ajax(
{
type: "Get",
url: "#Url.Action("GetCurrentRoomId","Home")",
success: function (data) {
currentRoomId = data;
}
});
//==========================================================
//TODO: Add Record to Server
$.ajax(
{
type: "Post",
url: "#Url.Action("AddMessage", "Home")",
data: { messageCont: message.toString() },
success: function (data) {
LoadRoomMessages(currentRoomId);
}
});
};
//$('#sendmessage').click(AddMessage());
// Get the user name and store it to prepend to messages.
// Set initial focus to message input box.
$('#message').focus();
// Start the connection.
$.connection.hub.start().done(function () {
$('#sendmessage').click(function () {
// Call the Send method on the hub.
chat.server.send($('#displayname').val(), $('#message').val());
// Clear text box and reset focus for next comment.
$('#message').val('').focus();
});
});
});
#*function AddMessage() {
$.ajax(
{
type: "Post",
url: "#Url.Action("AddMessage", "Home")",
data: { messageCont: message.toString() },
success: function (data) {
for (var i = 0; i < data.length; i++) {
//access with data[i].modelattribute
LoadRoomMessages(currentRoomId);
}
}
});
}*#
// This optional function html-encodes messages for display in the page.
function htmlEncode(value) {
var encodedValue = $('<div />').text(value).html();
return encodedValue;
}
function GetRoomName() {
var newRoomName = prompt('Enter a new Room Name', 'Name');
$.ajax(
{
type: "Post",
url: "#Url.Action("AddRoom", "Home")",
data: { chatRoom: newRoomName },
success: function (data) {
for (var i = 0; i < data.length; i++) {
//access with data[i].modelattribute
}
$('#ava-rooms').empty();
LoadRooms();
}
});
}
function DeleteRoom() {
var roomname = prompt('Enter a Room Name to be Deleted', 'Room Name');
$.ajax(
{
type: "Post",
url: "#Url.Action("DeleteRoom", "Home")",
data: { chatRoom: roomname },
success: function (data) {
for (var i = 0; i < data.length; i++) {
//access with data[i].modelattribute
}
$('#ava-rooms').empty();
LoadRooms();
}
});
}
function LoadRooms() {
$.ajax(
{
type: "Get",
url: "#Url.Action("GetRooms", "Home")",
success: function (data) {
json = data;
var obj = JSON.parse(json);
GetUserPicture();
for (var i = 0; i < data.length; i++) {
//access with data[i].modelattribute
// Add an Onlick event to this statment that calls LoadRoomMessages
//onclick="GetRoomName()"
$('#ava-rooms').append("<input type=\"button\" " + "onclick=LoadRoomMessages(" + obj[i].Id + ") " + "id=\"" + obj[i].RoomName + "\"" + "value=\"" + obj[i].RoomName + "\" />");
}
}
});
}
function GetUserPicture() {
$.ajax(
{
type: "Get",
url: "#Url.Action("GetUserPicture", "Home")",
success: function (data) {
$('.body-content').css("background-image", "url(\"" + data + "\")");
}
});
}
function LoadRoomMessages(id) {
$.ajax(
{
type: "Get",
url: "#Url.Action("GetMessages", "Home")",
data: { roomId: id },
success: function (data) {
$('#discussion').empty();
json = data;
var obj = JSON.parse(json);
for (var i = 0; i < data.length; i++) {
$('#discussion').append(htmlEncode(obj[i].Author) + " : " + htmlEncode(obj[i].Message) + "\r\n");
}
}
});
}
</script>
}
Home Controller:
using System;
using System.Linq;
using System.Net.NetworkInformation;
using System.Web.Mvc;
using System.Web.Script.Serialization;
using SignalRChat.Models;
namespace SignalRChat.Controllers
{
public class HomeController : Controller
{
ChatDBEntities DB = new ChatDBEntities();
ChatDBEntities1 DB_Uno = new ChatDBEntities1();
ChatDBEntities2 DB_Dos = new ChatDBEntities2();
public ActionResult Chat()
{
return View();
}
public ActionResult Users()
{
return View();
}
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
[HttpGet]
public string GetUserPicture()
{
try
{
var authorId = (int)Session["currentUserId"];
var pic = DB_Dos.ChatRoomUsers.Find(authorId).PictureURL;
if (String.IsNullOrWhiteSpace(pic))
return "http://www.adventuredogblog.com/wp-content/uploads/2014/03/3.jpg";
else
{
return pic;
}
}
catch (Exception)
{
return "http://www.adventuredogblog.com/wp-content/uploads/2014/03/3.jpg";
}
}
[HttpPost]
public bool AddMessage(string messageCont)
{
var authorId = (int) Session["currentUserId"];
var message = new ChatMessage();
message.Author = DB_Dos.ChatRoomUsers.Find(authorId).UserName; // Add Code to get the actual user
message.AuthorId = authorId; ; //Add Code to get current user Id
message.Message = messageCont;
message.MessageDate = DateTime.UtcNow;
message.RoomId = (int)Session["currentRoomId"]; ; //Add Room Code
message.RoomName = DB_Uno.ChatRooms.Find(message.RoomId).RoomName; // Get actual name based on id
try
{
DB.ChatMessages.Add(message);
DB.SaveChanges();
return true;
}
catch (Exception)
{
return false;
}
}
[HttpGet]
public int GetCurrentRoomId()
{
return (int) Session["currentRoomId"];
}
[HttpGet]
public string GetMessages(int roomId)
{
Session["currentRoomId"] = roomId;
var messages = (from message in DB.ChatMessages where message.RoomId == roomId orderby message.MessageDate ascending select message).ToList();
var serializer = new JavaScriptSerializer();
string json = serializer.Serialize(messages);
return json;
}
[HttpPost]
public bool AddRoom(string chatRoom)
{
var room = new ChatRoom();
room.IsActiveRoom = true;
room.RoomName = chatRoom;
room.isDefaultRoom = false;
room.UserCount = 1;
room.Id = -1;
try
{
DB_Uno.ChatRooms.Add(room);
DB_Uno.SaveChanges();
return true;
}
catch (Exception)
{
return false;
}
}
[HttpPost]
public bool DeleteRoom(string chatRoom)
{
var userId = (from u in DB_Uno.ChatRooms where u.RoomName == chatRoom select u.Id).ToList()[0];
var room = DB_Uno.ChatRooms.Find(userId);
var messages = (from u in DB.ChatMessages where u.RoomId == room.Id select u).ToList();
try
{
foreach (var message in messages)
{
DB.ChatMessages.Remove(message);
}
DB.SaveChanges();
DB_Uno.ChatRooms.Remove(room);
DB_Uno.SaveChanges();
return true;
}
catch (Exception)
{
return false;
}
}
[HttpGet]
public string GetRooms()
{
var rooms = DB_Uno.ChatRooms;
var serializer = new JavaScriptSerializer();
string json = serializer.Serialize(rooms);
return json;
}
public ActionResult AddUser()
{
return View();
}
[HttpPost]
public ActionResult AddUser(ChatRoomUser user)
{
var users = DB_Dos.ChatRoomUsers;
try
{
user.LastActivity = DateTime.UtcNow;
user.RoomId = 1;
user.RoomName = "General Chat";
users.Add(user);
DB_Dos.SaveChanges();
Session["currentUserId"] = user.UserId;
return View("Chat");
}
catch(Exception)
{
return View();
}
}
public ActionResult Login()
{
return View();
}
[HttpPost]
public ActionResult Login(ChatRoomUser LUser)
{
var userId = (from u in DB_Dos.ChatRoomUsers where u.UserName == LUser.UserName select u.UserId).ToList();
var user = DB_Dos.ChatRoomUsers.Find(userId[0]);
if(user.password == LUser.password)
{
user.LastActivity = DateTime.UtcNow;
Session["currentRoomId"] = user.RoomId;
Session["currentUserId"] = user.UserId;
DB_Dos.SaveChanges();
return View("Chat");
}
else
{
return View();
}
}
}
}

You need to use form action attribute to point it to your controller or use i.e.Html.BeginForm and put your buttons inside the form

Related

Select values from Json to add to dropdown list

I am needing to select values from a JSON, that is created based off a SQL Server database, and add them to a dropdown list as value seleciotns. I am using asp.net MVC. Everything seems to be working, excpet I can not figure out how to select "value" and "name" from my Json and use them. All I need help with is selecting those varibles and using them in the code.
This is my javascript function
$(function () {
$("#ddlDepartments").change(function () {
var selectedid = $('option:selected').val();
var ddlSubDepartments = $("#ddlSubDepartments"); //get the dropdownlist
if (selectedid > 0) {
$.ajax({
url: "/RecordEntries/PopulateddlSubDepartments",
data: {
id: selectedid
},
type: "Post",
dataType: "Json",
success: function (data) {
alert(data);
ddlSubDepartments.html("");
ddlSubDepartments.append($('<option></option>').val("").html("Please select a Sub Department"));
for (var i = 0; i < data.length; i++) {
ddlSubDepartments.append($('<option></option>').val(value[i]).html(name[i]));
}
},
error: function () {
alert('Failed to retrieve Sub Departments.');
}
});
}
});
});
And my JSON is like this, it can be edited to whatever format.
{"value":5,"name":"Sub Department 1"},{"value":8,"name":"Sub Department 2"}
EDIT: I'll add in my controller action that the jscript is calling at the beginning.
public ActionResult PopulateddlSubDepartments(int id)
{
var query = from d in _context.SubDepartments
where d.DepartmentId == id
select "{\"value\":" + d.SubDepartmentId + "," + "\"name\":\"" + d.SubDepartmentName + "\"}";
if (query == null)
ViewBag.SubDepartments = false;
else
ViewBag.SubDepartments = true;
return Json(query.ToList());
}
try to fix action
public ActionResult PopulateddlSubDepartments(int id)
{
var query = _context.SubDepartments
.Where(d=> d.DepartmentId == id)
.Select ( i=> new {
Value= i.SubDepartmentId,
Name= i.SubDepartmentName
}).ToList();
if (query == null)
ViewBag.SubDepartments = false;
else
ViewBag.SubDepartments = true;
return Json(query);
}
and ajax can be simplified too
ddlSubDepartments.html("");
.....
success: function (result) {
var s = '<option value="-1">Please Select </option>';
for (var i = 0; i < result.length; i++)
{
s += '<option value="' + result[i].value + '">' + result[i].name + '</option>';
}
$('#ddlSubDepartments').html(s);
},
value[i] doesn't exist. Try:
ddlSubDepartments.append($('<option></option>').val(data.value[i]).html(data.name[i]));
you need to deserialize it to plain objet like this:
let obj = JSON.parse(data); // now it looks like this : {value: 5, ...}
ddlSubDepartments.append($('<option
</option>').val(obj['value']).html(obj['name']));
Perform the following steps
add class JsonData
public class JsonData
{
public string HtmlMsg { get; set; }
public string HtmlBody { get; set; }
public bool Success { get; set; }
}
2.add ViewHelper class
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
public static class ViewHelper
{
public static string RenderPartialToString(this ControllerBase controller, string partialViewName, object model)
{
IView view = ViewEngines.Engines.FindPartialView(controller.ControllerContext, partialViewName).View;
return RenderViewToString(controller, view, model);
}
public static string RenderViewToString(this ControllerBase controller, IView view, object model)
{
using (var writer = new StringWriter())
{
controller.ViewData.Model = model;
var viewContext = new ViewContext(controller.ControllerContext, view, controller.ViewData, controller.TempData, writer);
view.Render(viewContext, writer);
return writer.GetStringBuilder().ToString();
}
}
}
3.change PopulateddlSubDepartments to :
public ActionResult PopulateddlSubDepartments(int id)
{
List<SubDepartment> model = (from d in _context.SubDepartments
where d.DepartmentId == id
select d).ToList();
if (query == null)
ViewBag.SubDepartments = false;
else
ViewBag.SubDepartments = true;
return Json(new JsonData()
{
HtmlMsg = "",
HtmlBody = this.RenderPartialToString("_DropDownList", model),
Success = true,
});
}
4.in your view change to
//...........................
<div class="row" id="tmpDropDownList">
#Html.Partial("_DropDownList", Model)
</div>
//...........................
5.add partialview _DropDownList
#model List<namescpace.SubDepartment>
#Html.DropDownList("ddlDepartments", new SelectList(Model, "SubDepartmentId", "SubDepartmentName"), "--please select--")
add script
$(function() {
$("#ddlDepartments").change(function() {
var selectedid = $('option:selected').val();
if (selectedid > 0) {
$.ajax({
url: "/RecordEntries/PopulateddlSubDepartments",
data: {
id: selectedid
},
type: "Post",
dataType: "Json",
success: function(result) {
$("#tmpDropDownList").html(result.HtmlBody);
},
error: function() {
alert('Failed to retrieve Sub Departments.');
}
});
}
});
});

How I tried to refresh div of the webpage?

When I tried to refresh my page I can do it with this code;
$(document).ready(function () {
var interval = 500;
var refresh = function () {
$.ajax({
url: "https://localhost:44399/area/areadetail/#ViewBag.i",
cache: false,
success: function (html) {
$('.yika').html(html);
setTimeout(function () {
refresh();
}, interval);
}
});
};
refresh();
});
but my web page seems as;
How can I fix this situation in my code?
I will refresh the part of the page for you
step 1. add this class
public class JsonData
{
public string HtmlMsg { get; set; }
public string HtmlBody { get; set; }
public bool Success { get; set; }
}
step 2. then add class ViewHelper.cs
public static class ViewHelper
{
public static string RenderPartialToString(this ControllerBase controller)
{
return RenderViewToString(controller);
}
public static string RenderPartialToString(this ControllerBase controller, string partialViewName)
{
IView view = ViewEngines.Engines.FindPartialView(controller.ControllerContext, partialViewName).View;
return RenderViewToString(controller, view);
}
public static string RenderPartialToString(this ControllerBase controller, string partialViewName, object model)
{
IView view = ViewEngines.Engines.FindPartialView(controller.ControllerContext, partialViewName).View;
return RenderViewToString(controller, view, model);
}
}
step 3. add your PartialView and Put the part you want to refresh in PartialView exapmle:_MyDiv
<div class="col-level1-20">
<div class="row-new shadow-slider-list background-white border-r-1-ddd border-t-ddd">
refresh div
</div>
</div>
step 4. Your Action in Controller
public ActionResult areadetail(int id)
{
//............
return Json(new JsonData()
{
HtmlMsg = "OK",
HtmlBody = this.RenderPartialToString("_MyDiv"),
Success = true,
});
}
step 5. add PartialView in View
#{
ViewBag.Title = "TestPartialView";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<section class="row-new margin-t-10">
<div class="row-new">
<div class="container style-direction-rtl">
<span class="style-font-16-sb color-black">Test PartialView</span>
</div>
<div class="container style-direction-rtl" id="yika">
#Html.Partial("_MyDiv")
</div>
</div>
</section>
step 6. Finally add script
$(document).ready(function () {
var interval = 500;
var refresh = function () {
$.ajax({
url: "https://localhost:44399/area/areadetail/#ViewBag.i",
cache: false,
success: function (result) {
if(result.Success)
{
$('#yika').html(result.HtmlBody);
}
else
{
alert('failed');
}
}
error: function () {
alert('error');
}
});
};
});

How to upload image from React to ASP.NET Core Web API?

I have Web API controller in mt server side
[HttpPost("CreateImage")]
public void CreateImage([FromBody] ImageDTO img)
{
Image image = new Image { FileName = img.FileName };
byte[] imageData = null;
using (var binaryReader = new BinaryReader(img.Image.OpenReadStream()))
{
imageData = binaryReader.ReadBytes((int)img.Image.Length);
}
image.Picture = imageData;
imageRepo.Create(image);
}
Where ImageDTO is
public class ImageDTO
{
public string FileName { get; set; }
public IFormFile Image { get; set; }
}
and Image.cs like this
public class Image
{
public int Id { get; set; }
public string FileName{ get; set; }
public byte[] Picture { get; set; }
public List<User> Users { get; set; }
}
And this is what I using for handling and sending image on React client:
<form>
<p>
<label>Аватар</label>
<input name="Avatar" id = 'img' type="file" class="form-control" onChange={(e)=>this.handleImageChange(e)}/>
</p>
<p>
<input type="submit" value="Добавить" onClick={this.sendImage}/>
</p>
</form>
<div className="imgPreview">
{$imagePreview}
</div>
function for handling file into state
handleImageChange(e) {
e.preventDefault();
let form = new FormData();
for (var index = 0; index < e.target.files; index++) {
var element = e.target.files[index];
form.append('file', element);
}
this.setState({file: form});
}
sending it on server
async sendImage(event) {
event.preventDefault();
console.log(this.state.file);
await addImage(this.state.file);
console.log('it works');}
addImge function:
addImage = async ( image) => {
await fetch('https://localhost:44331/api/users/CreateImage',
{
method: 'POST',
mode: 'cors',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + sessionStorage.tokenKey
},
body: JSON.stringify({
FileName: 'Img',
Image: image
})
}
)
}
But when it`s sending request on server it return Error 400, which means "Bad Request". So I think it is may be wrong type of data sent or something like that. Maybe someone sees a mistake or something that can be fixed. Or someone could show a working example of sending images from React to Web Api server. I need your help guys!
For uploading, you need to pay attention to points below:
You need to use formdata with FromForm
The fields in formdata should be corresponding to the model fields.
Steps:
Change the Controller action.
public void CreateImage([FromForm] ImageDTO img)
{
}
Client Code:
async sendImage(event) {
event.preventDefault();
console.log(this.state.file);
await this.addImage(this.state.file);
console.log('it works');
};
addImage = async (image) => {
await fetch('https://localhost:44385/api/users/CreateImage',
{
method: 'POST',
mode: 'cors',
headers: {
'Accept': 'application/json',
'Authorization': 'Bearer ' + sessionStorage.tokenKey
},
body: this.state.file
}
)
}
handleImageChange(e) {
e.preventDefault();
let form = new FormData();
for (var index = 0; index < e.target.files.length; index++) {
var element = e.target.files[index];
form.append('image', element);
}
form.append('fileName', "Img");
this.setState({ file: form });
};

Getting the result from controller but ajax call fetching error instead of success in MVC5 and C#

The controller is giving me the result and TempData["DCFormList"] is showing the count 3 (key, value and success message) but in the AJAX call I am getting alert("fail").
public ActionResult INTImportData()
{
if (Session["UserLogon"] != null)
{
BLINTForms objForm = new BLINTForms();
objDCFormList = new DCFormList();
int jobId = Session["Job_ID"] == null ? 0 : (int)Session["Job_ID"];
ViewBag.jobId = jobId;
objDCFormList.Form = objForm.GetINTFormTempDataByJobId(jobId);
TempData["DCFormList"] = objDCFormList.Form;
return View(objDCFormList.Form);
}
else
return Redirect("~/Account/Login");
}
function GetINTFormTempData(JobId) {
var result = null;
$.ajax({
type: "GET",
url: '/ImportForms/GetINTFormTempDataByJobId',
data: { jobId: JobId },
traditional: false,
success: function (data)
{
result = data;
alert ("JobId");
LoadINTData(result);
if (result.length > 0)
$(".upload").show();
else
$(".upload").hide();
},
error: function (data)
{
alert("fail");
Success = false;
}
});
public List<DCForm> GetINTFormTempDataByJobId(int jobId)
{
objDatabaseHelper = new DatabaseHelper();
List<DCForm> objDCFormList = new List<DCForm>();
DCForm objDCForm;
int record = 0;
try
{
objDatabaseHelper.AddParameter("Job_ID", jobId == 0 ? DBNull.Value : (object)jobId);
DbDataReader reader = objDatabaseHelper.ExecuteReader(BLDBRoutines.SP_GETINTFORMTEMPDATA, CommandType.StoredProcedure);
if (reader.HasRows)
{
while (reader.Read())
{
objDCForm = new DCForm();
objDCForm.SerialNo = ++record;
objDCForm.PayerId = reader.IsDBNull(reader.GetOrdinal("PayerId")) ? 0 : reader.GetInt32(reader.GetOrdinal("PayerId"));
objDCFormList.Add(objDCForm);
}
}
return objDCFormList;
}
catch (Exception exce)
{
throw exce;
}
finally
{
if (objDatabaseHelper != null)
objDatabaseHelper.Dispose();
}
}
public class DCForm : DataOperationResponse
{
public int SerialNo { get; set; }
public int PayerId { get; set; }
public class DCFormList : DataOperationResponse
{
private List<DCForm> _form = null;
public DCFormList()
{
if (_form == null)
_form = new List<DCForm>();
}
public List<DCForm> Form
{
get { return _form; }
set { _form = value; }
}
}
I have just tried to reproduce your case. Here are sample code. You can update your code to get from Database from my code.
Your controller:
public class ImportFormsController : Controller
{
public JsonResult INTImportData(int jobId)
{
//if (Session["UserLogon"] != null)
//{
BLINTForms objForm = new BLINTForms();
var objDCFormList = new DCForm.DCFormList();
//int jobId = Session["Job_ID"] == null ? 0 : (int)Session["Job_ID"];
//ViewBag.jobId = jobId;
objDCFormList.Form = objForm.GetINTFormTempDataByJobId(jobId);
//TempData["DCFormList"] = objDCFormList.Form;
//Response.StatusCode = (int)HttpStatusCode.OK;
return Json(objDCFormList.Form, JsonRequestBehavior.AllowGet);
//}
//else
//return Json("Login required", JsonRequestBehavior.AllowGet);
}
}
public class BLINTForms
{
public List<DCForm> GetINTFormTempDataByJobId(int jobId)
{
List<DCForm> objDCFormList = new List<DCForm>();
DCForm objDCForm;
int record = 0;
try
{
for (var i = 0; i < 5; i++)
{
objDCForm = new DCForm();
objDCForm.SerialNo = ++record;
objDCForm.PayerId = 100;
objDCFormList.Add(objDCForm);
}
return objDCFormList;
}
catch (Exception exce)
{
throw exce;
}
finally
{
}
}
}
public class DCForm : DataOperationResponse
{
public int SerialNo { get; set; }
public int PayerId { get; set; }
public class DCFormList : DataOperationResponse
{
private List<DCForm> _form = null;
public DCFormList()
{
if (_form == null)
_form = new List<DCForm>();
}
public List<DCForm> Form
{
get { return _form; }
set { _form = value; }
}
}
}
public class DataOperationResponse
{
//public string Message { get; set; }
}
I create a test in HomeController:Index with Index.cshtml
<input type="text" id="jobId"/>
<button onclick="GetINTFormTempData($('#jobId').val())">Get Data</button>
<script>
function GetINTFormTempData(JobId) {
var result = null;
$.ajax({
type: "GET",
url: '/ImportForms/INTImportData', //**change url**
data: { jobId: JobId },
traditional: false,
success: function(data) {
result = data;
alert("JobId");
alert(JSON.stringify(data));
LoadINTData(result);
if (result.length > 0)
$(".upload").show();
else
$(".upload").hide();
},
error: function(data) {
alert("fail");
Success = false;
}
});
}
</script>
You should use this
Change ActionResult to JsonResult and
return Json(objDCFormList.Form, JsonRequestBehavior.AllowGet);
TempData["DCFormList"] can not get value in your AJAX call.
And also check your url in route with url in ajax call.
If I get your question correctly and, and if you want to use ActionResult set result as Success with:
Response.StatusCode = (int)HttpStatusCode.OK;
So in your case:
public ActionResult INTImportData()
{
if (Session["UserLogon"] != null)
{
BLINTForms objForm = new BLINTForms();
objDCFormList = new DCFormList();
int jobId = Session["Job_ID"] == null ? 0 : (int)Session["Job_ID"];
ViewBag.jobId = jobId;
objDCFormList.Form = objForm.GetINTFormTempDataByJobId(jobId);
TempData["DCFormList"] = objDCFormList.Form;
Response.StatusCode = (int)HttpStatusCode.OK;
return View(objDCFormList.Form);
}
else
return Redirect("~/Account/Login");
}
I hope this helps.

tryupdatemodel does not work through ajaxcall?

i am trying to post my model to the server through an ajax call. Unfortunately the Model is not updated?
<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<form id="ajaxForm" action="">
<div>
name:<%= Html.TextBoxFor(model => model.number) %>
</div>
<%--hidden vars--%>
<input type="hidden" id="Hidden1" />
<%= Html.Hidden("myModel", Model.Serialize())%>
</form>
<button id="submitbutton">
save
</button>
<script type="text/javascript">
$(document).ready(function () {
$("#submitbutton").click(function () {
var FormData = $("#ajaxForm").serialize();
$.ajax({
type: 'POST',
url: "/Home/SaveAjax",
data: { inputdata: $("#myModel").val() },
datatype: 'JSON'
});
})
});
</script>
[HttpPost]
public JsonResult SaveAjax(string inputdata)
{
MyModel myModel = (inputdata.DeSerialize() ?? TempData["myModel"] ?? new MyModel()) as MyModel;
//TryUpdateModel does not update my model??
TryUpdateModel(myModel);
TempData["myModel"] = myModel;
return Json(new { resultaat = "finished" });
}
[Serializable]
public class MyModel
{
//[Required]
public string name { get; set; }
public bool flag { get; set; }
public int number { get; set; }
public string address { get; set; }
public string abn { get; set; }
public string postalcode { get; set; }
}
public static class Extensions
{
public static string Serialize(this object myobject)
{
var sw = new StringWriter();
var formatter = new LosFormatter();
formatter.Serialize(sw, myobject);
return sw.ToString();
}
public static object DeSerialize(this string mystring)
{
if (string.IsNullOrEmpty(mystring))
return null;
var formatter = new LosFormatter();
MyModel mym = (MyModel)formatter.Deserialize(mystring);
return mym;
}
}
In your AJAX request you are sending only the value of the hidden field:
data: { inputdata: $("#myModel").val() }
so you cannot expect to get any other values on your server than this hidden field. If you want to POST the entire form contents use the formData variable that you declared in your code but left unused:
$('#submitbutton').click(function () {
var formData = $('#ajaxForm').serialize();
$.ajax({
type: 'POST',
url: '/Home/SaveAjax',
data: formData,
dataType: 'json'
});
});

Categories