У меня проблемы с публикацией вызова ajax с моей моделью, у которой есть список.
Моя модель:
public class MyListItem
{
public int Id { get; set; }
public string Value { get; set; }
}
public class MyModel
{
public int Integer { get; set; }
public string Str { get; set; }
public List<MyListItem> MyList { get; set; }
public MyModel()
{
Str = "Initial";
Integer = 1;
}
}
, на мой взгляд, я пытаюсь отобразитьперечислить элементы MyList как:
<div>
@{
if (Model.MyList != null)
{
int i = 0;
foreach (var item in Model.MyList)
{
<label>@item.Value</label>
@Html.Hidden("MyList[" + i + "].Id", item.Id);
@Html.TextArea("MyList[" + i + "].Value", item.Value, 1, 10, new { Value = item.Value });
<div />
i++;
}
}
}
</div>
это представление является частичным и вызывается из "основного" представления следующим образом:
<form id="mine2">
@{Html.RenderPartial("Test2", Model);}
</form>
Моя запись на ajax:
function OnAddToListAjax() {
var actionUrl = '@Url.Action("AddToList", "Test1")';
var alist = @Html.Raw(Json.Encode(Model));
try
{
$.ajax(
{
url: actionUrl,
type: "POST",
dataType: "HTML",
contentType: 'application/json',
processData: false,
//data: JSON.stringify({myModel: existing, list: alist}),
data: JSON.stringify({myModel: alist}),
traditional: true,
success: function(result) {
//alert(result);
$('#mine2').html(result);
},
error: function (req, status, error) {
HandleError(req);
}
});
}
catch (err)
{
alert(err);
}
}
мой контроллер:
[HttpPost]
public ActionResult AddToList(MyModel myModel)//, MyList list)
{
try
{
//var list = new MyList();
if (myModel.MyList == null)
myModel.MyList = new MyList();
myModel.Str += " Changed";
//throw new Exception("This is broken!");
myModel.MyList.Add(new MyListItem { Id = myModel.MyList.Count, Value = string.Format("Item {0}", myModel.MyList.Count) });
//myModel.MyList = list;
return PartialView("Test2", myModel);
}
catch (Exception ex)
{
myModel.ErrorModel = new ErrorModel() { ErrorDetails = "Error adding to list", ErrorString = ex.Message };
return PartialView("Test2", myModel);
}
}
эта концепция отлично работает для меня при использовании прямого свойства моей модели.например, если я пытаюсь установить / получить свойство Str.Однако для элементов MyList они, кажется, никогда не сериализуются должным образом в команде Json.Он сохраняет значения, которые были частью оригинальной модели.т.е. когда я в первый раз вызываю это, MyList имеет значение null, поэтому я создаю его и возвращаю как часть результата действия.Это показывает значения в порядке.Однако, если я вручную отредактирую значение и повторно отправлю его, то публикуемое значение будет таким же, как первоначально было получено.
Я полагаю, что это возможно связано с именем, которое я даю TextArea, иэто не может быть решено должным образом.Используя Firebug, источником для одной из указанных текстовых областей является:
<textarea id="MyList_0__Value" rows="1" name="MyList[0].Value" cols="10" value="Item 0">Item 0</textarea>
Итак, я пытаюсь определить, почему кодировка моей модели не имеет обновленных (отредактированных) значений.
ТИА