вернуть Tuple в поле зрения - PullRequest
0 голосов
/ 02 октября 2018

Попытка с использованием кортежей c # 7, таких как

public (string, bool) ProcessForm([FromBody]Dictionary<string,string> contactFormRequest)

Но я получаю сообщение об ошибке "CS1031: Тип ожидается".Я думаю, это еще не поддерживается.

Затем я попытался

public Tuple<string, bool> ProcessForm([FromBody]Dictionary<string,string> contactFormRequest)
    {
        var message = "test";
        var result = true;
        var tuple = new Tuple<string, bool>(message, result);
        return tuple;
    }

Это не дает ошибки, но потом я не могу подобрать его в файле вида

function handleResult(data) {
    $("#custommessages").html(data.Item1);
}

$2sxc(@Dnn.Module.ModuleID).webApi.post("Form/ProcessForm", {}, newItem, true).then(handleResult);

Это ничего не выводит.

Если я возвращаю простую строку из контроллера, «data» прекрасно ее выбирает.

Как вы берете значения из возврата Tuple?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Почему бы просто не вернуть IActionResult?

Вы можете просто написать анонимный тип вместо Tuple!

Именованные типы могут занимать некоторые бесполезные пробелы (как я думаю ...)

Попробуйте это:

public IActionResult ProcessForm([FromBody]Dictionary<string,string> contactFormRequest)
{
    var message = "test";
    var result = true;
    //This will create an anonymous type! (you can see its named as "a'")
    var resultData = new { Message = message, Result = result }; 
    return Json(resultData);
}

Жаль, что это может помочь вам.

0 голосов
/ 02 октября 2018

Почему бы не создать класс POCO для сериализации:

public class SomeResult
{
    public string Message{get;set;}
    public bool Result{get;set;}
}

, затем

public SomeResult ProcessForm([FromBody]Dictionary<string,string> contactFormRequest)
{
    var message = "test";
    var result = true;
    return new SomeResult{Message = message, Result = result};
}
...