Ich habe eine Funktion in Javascript erstellt:
function addNewManufacturer() {
var name = $("#id-manuf-name").val();
var address = $("#id-manuf-address").val();
var phone = $("#id-manuf-phone").val();
var sendInfo = {
Name: name,
Address: address,
Phone: phone
};
$.ajax({
type: "POST",
url: "/Home/Add",
dataType: "json",
success: function (msg) {
if (msg) {
alert("Somebody" + name + " was added in list !");
location.reload(true);
} else {
alert("Cannot add to list !");
}
},
data: sendInfo
});
}
Ich rief die jquery.json-2.3.min.js
-Skriptdatei an und verwendete sie für die toJSON(array)
-Methode.
Im Controller habe ich diese Add
-Aktion
[HttpPost]
public ActionResult Add(PersonSheets sendInfo) {
bool success = _addSomethingInList.AddNewSomething( sendInfo );
return this.Json( new {
msg = success
});
}
Aber sendInfo
als Methodenparameter wird zu Null.
Das Model:
public struct PersonSheets
{
public int Id;
public string Name;
public string Address;
public string Phone;
}
public class PersonModel
{
private List<PersonSheets> _list;
public PersonModel() {
_list= GetFakeData();
}
public bool AddNewSomething(PersonSheets info) {
if ( (info as object) == null ) {
throw new ArgumentException( "Person list cannot be empty", "info" );
}
PersonSheets item= new PersonSheets();
item.Id = GetMaximumIdValueFromList( _list) + 1;
item.Name = info.Name;
item.Address = info.Address;
item.Phone = info.Phone;
_list.Add(item);
return true;
}
}
Wie kann ich eine Aktion durchführen, wenn die Daten mit POST gesendet wurden?
Ich weiß nicht, wie ich damit umgehen soll. Es ist auch möglich, die Antwort (an ajax) über JSON zurückzusenden.
Vielen Dank
public class Person
{
public string Name { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
}
public ActionResult PersonTest()
{
return View();
}
[HttpPost]
public ActionResult PersonSubmit(Vh.Web.Models.Person person)
{
System.Threading.Thread.Sleep(2000); /*simulating slow connection*/
/*Do something with object person*/
return Json(new {msg="Successfully added "+person.Name });
}
<script type="text/javascript">
function send() {
var person = {
name: $("#id-name").val(),
address:$("#id-address").val(),
phone:$("#id-phone").val()
}
$('#target').html('sending..');
$.ajax({
url: '/test/PersonSubmit',
type: 'post',
dataType: 'json',
contentType: 'application/json',
success: function (data) {
$('#target').html(data.msg);
},
data: JSON.stringify(person)
});
}
</script>
var SendInfo= { SendInfo: [... your elements ...]};
$.ajax({
type: 'post',
url: 'Your-URI',
data: JSON.stringify(SendInfo),
contentType: "application/json; charset=utf-8",
traditional: true,
success: function (data) {
...
}
});
und in Aktion
public ActionResult AddDomain(IEnumerable<PersonSheets> SendInfo){
...
sie können Ihr Array so binden
var SendInfo = [];
$(this).parents('table').find('input:checked').each(function () {
var domain = {
name: $("#id-manuf-name").val(),
address: $("#id-manuf-address").val(),
phone: $("#id-manuf-phone").val(),
}
SendInfo.Push(domain);
});
hoffe das kann dir helfen.
Verwenden Sie JSON.stringify(<data>)
.
Ändern Sie Ihren Code: data: sendInfo
in data: JSON.stringify(sendInfo)
. Hoffe, das kann Ihnen helfen.
Ihre PersonSheets haben eine Eigenschaft int Id
, Id
ist nicht im Beitrag, daher schlägt die Modellbindung fehl. Machen Sie Id zu Null (int?) Oder senden Sie mindestens eine Id = 0 mit dem POst.