사전을 컨트롤러에 전달 asp.net mvc
활자 사전을 건네고 싶습니다.<int,int>
Ajax 게시물을 통해 내 컨트롤러로.여기서 주요 이유는 게시물에 1-3개의 키 값 쌍이 있을 수 있기 때문입니다(컴파일 시에는 이러한 값 중 어느 것도 알려져 있지 않습니다). 향후에는 5개까지 올라갈 수 있습니다.
또한 게시물에서 ID와 이름과 같은 다른 데이터를 전달해야 하는데, 이는 모두 정상적으로 작동합니다.
이 사전을 자바스크립트로 어떻게 구성한 다음 JQuery 포스트를 통해 보내고 최종적으로 처리할 컨트롤러에서 수신하면 됩니까?
편집 2: 저는 사전을 통과하려고 하는 대신 각 값에 대한 게시물로 이 문제를 해결하기로 결정했습니다.
편집: 기능에 대한 나의 소스는 내가 무엇을 시도하고 있는지 볼 수 있습니다.
function BindAddMenuItem() {
$(".AddMenuItem").click(function (e) {
e.preventDefault();
//get header id from link by removing addmenuitem from this.id
var currentId = $(this).attr("id").replace("AddMenuItem", "");
//get itemnumber, itemname, itemdetails from textboxes with same header id
var restaurantId = jQuery.trim($("#RestaurantId").val());
var itemNumber = jQuery.trim($("#ItemNumber" + currentId).val());
var itemName = jQuery.trim($("#ItemName" + currentId).val());
var itemDetails = jQuery.trim($("#ItemDetails" + currentId).val());
var costs = new Object();
//select all textboxes with class "Header" + currentId
$(".Header" + currentId).each(function (i) {
var optionId = $(this).attr("id").replace("Option", "");
costs[optionId] = $(this).val();
});
$.ajax(
{
type: "POST",
url: "/Menu/AddMenuItem",
data: "reastaurantId=" + restaurantId + "&menuHeaderId=" + currentId + "&itemNumber=" + itemNumber + "&itemName=" + itemName + "&itemDetails=" + itemDetails + "&costs=" + costs,
dataType: "html",
success: function (result) {
var domElement = $(result);
$("#MenuContainer").replaceWith(domElement);
var newNum = parseInt(itemNumber) + 1;
$("#ItemNumber" + currentId).val(newNum);
BindAllBehaviours();
}
});
});
}
(javascript) 같은 것.
dict = new Object();
dict['12'] = 5;
dict['13'] = 6;
dict['1000'] = 21;
dict['9'] = 13;
dict['13'] = 48;
$.post('/client.mvc/mypostaction/', { myDictionary: dict });
그런 다음 게시할 수 있습니다.dict
를 사용하여 컨트롤러에 대한 반대Dictionary<int, int>
속성 유형으로
ActionResult MyPostAction(Dictionary<string, int> myDictionary)
작성자 코드에서 두 번째 편집:
다음은 저에게 효과가 있습니다.Dictionary<string, int> kvPairs
.<int, int>
결국에는 작동하지 않을 것입니다.
게시물을 다음과 같이 작성:
var dict = new Object();
dict['13'] = 9;
dict['14'] = 10;
dict['2'] = 5;
$.post('controller.mvc/Test', { 'kvPairs': dict }, function(obj) { $('#output').html(obj.Count); });
JavaScript 개체/사전을 키-값 쌍 목록으로 ASP에 전달해야 합니다.NET MVC 컨트롤러:Dictionary<TKey, TValue>
예상됩니다.예:
다음과 같은 사전이 있는 경우:
public Dictionary<string, decimal?> SomeMapping { get; set; }
그런 다음 JavaScript에서 다음과 같은 것을 사용해야 합니다.
var sourceMapping = { a: 1, b: 1.5, c: null };
var SomeMapping = [];
for (var key in sourceMapping) {
if (sourceMapping.hasOwnProperty(key)) {
SomeMapping.push({ Key: key, Value: sourceMapping[key] });
}
}
컨텐츠 유형이 다음으로 설정된 비동기 POST 요청(jQuery를 사용하여 전송)에서 이 접근 방식을 사용했습니다.'application/json'
(이는 귀하의 경우 중요하거나 중요하지 않을 수 있습니다.)
클라이언트(자바스크립트):
var dict = new Object();
dict.Key1 = "Value1"
dict.Key2 = "Value2"
$.post('/YourController/YourAction/', dict);
참고: "dict" 개체는 사용자의 작업으로 전송되기 전에 백그라운드에서 직렬화됩니다.
서버:
public ActionResult YourAction()
{
string postData = string.Empty;
using (StreamReader sr = new StreamReader(Request.InputStream))
{
postData = sr.ReadToEnd();
}
//Load post data into JObject (Newtonsoft.Json)
JObject o = JObject.Parse(postData);
//Extract each key/val
string val1 = (string)o["Key1"];
//Do whatever....
}
저는 MCZER를 제외하고는 아무 것도 효과가 없었지만, 그는 모든 단계를 보여주지 않았고, 당신이 Ajax 요청을 어떻게 설정했는지 기억하려고 할 때 어려움을 겪었습니다.그래서 저는 실제로 효과가 있는 모든 것을 넣고 싶었습니다.첫째, JavaScript에서:
var validDict = new Array();
validDict[0] = { key: 1, value: 4 }
validDict[1] = { key: 42, value: 5}
var path = "@Url.Action("ControllerName", "ActionName")";
$.ajax({
url: path,
type: "POST",
data: JSON.stringify(validDict),
contentType: "application/json; charset=utf-8",
async:false,
success: function(status, xhr)
{
alert(status);
},
error: function(xhr, status, error)
{
alert(error);
}});
그런 다음 컨트롤러에서 다음 작업을 수행합니다.
[HttpPost]
public ActionResult ActionName(Dictionary<int, int> validDict)
{
// doStuff();
return Content("Success");
}
서버 측의 ID 사전 <string, string> 사전은 다음과 같이 Javascript에서 게시할 수 있습니다.
{"Key1": "Value1", "Key2": "Value2"}
ASP의 Server Side(서버 측)NET 웹 API
[HttpPost]
public IHttpActionResult([FromBody]IDictionary<string, string> requestParam){
}
위의 예는 본문에 Json 데이터가 있는 Http POST에 대한 것입니다.
사전을 통과하기 위해 저는 다음과 같은 작업 답을 찾았습니다: 사전을 asp-net-mvc-action으로 제출합니다.
@model WebApplication3.Controllers.ExampleViewModel @{ ViewBag.Title = "New";
var first = Guid.NewGuid(); var second = Guid.NewGuid(); }
<h2>New</h2>
@using (Html.BeginForm(new { action = "create", controller = "home" })) {
foreach (var kvp in Model.Values) {
<p>
<input type="text" name="Model.Values[@first].Key" value="@kvp.Key" />
<input type="text" name="Model.Values[@first].Value" value="@kvp.Value" />
<input type="hidden" name="Model.Values.Index" value="@first" />
</p>
}
사전 인덱스에 대한 A Guid를 생성해야 하며, 키에 대한 입력, 값에 대한 입력, 사전 인덱스에 대한 입력 등 3개를 생성해야 합니다.
또한 Jquery를 사용하여 다음과 같이 제출하였습니다.
$('form#frmFormId').submit(function (e) {
e.preventDefault();
var formData = new FormData(this);
//debugger;
$('#cover-spin').show(100);
$.ajax({
type: 'POST',
url: $(this).attr('action'),
data: formData,
processData: false,
contentType: false
}
);
return false;
});
언급URL : https://stackoverflow.com/questions/1999525/pass-dictionary-to-controller-asp-net-mvc
'bestsource' 카테고리의 다른 글
이벤트 로그가 이미 있는지 확인하는 방법 (0) | 2023.07.28 |
---|---|
Android Emulator 오류 메시지: "PANIC: 'x86' CPU에 대한 에뮬레이터 엔진 프로그램이 없습니다." (0) | 2023.07.28 |
오라클에서 레코드 유형에 대한 루프를 쓰는 방법 (0) | 2023.07.23 |
Oracle에서 두 날짜 사이의 일 수(날짜 포함)를 가져옵니다. (0) | 2023.07.23 |
C 함수로 셸 내장 명령을 실행하려면 어떻게 해야 합니까? (0) | 2023.07.23 |