0

あなたがオブジェクトを持っているとしましょう

public class SomeViewModel
    {
        public SomeViewModel()
        {
            this.SomeData = new List<SomeData>();
        }

        public string Name { get; set; }
        public string Surname{ get; set; }
        public List<SomeData> SomeData { get; set; }
    }

    public class SomeData
    {
        public string Name { get; set; }
        public string Value { get; set; }
    }

そして今、ASP.NETアプリケーションからASP.NETMVCアプリケーションにクエリ文字列としてモデルを渡したい

string json = JsonConvert.SerializeObject(someModelVM);
//how to convert it to querystring ?
Response.Redirect("http://somedomain.com/SomeAction?redirect=" + querystring, true);

したがって、リダイレクト後は適切にバインドされます

public ActionResult SomeAction(SomeViewModel someViewModel)
{
//do something here
}

アップデート

複雑にする代わりに、単純なソリューションを選択しました。

 string json = JsonConvert.SerializeObject(someModelVM);
 Response.Redirect("http://somedomain.com/SomeAction?redirect=" + json, true);


public ActionResult SomeAction(string json)
    {
        //try to deserialize json
        //security check the json
        //do stuff
    }
4

3 に答える 3

1

クラスを「クエリ文字列」に変換するこの例を見ることができます

たとえば、あなたが持っているクラスでは、次のようにする必要があります。

Name = My name
Surname = My Surname
SomeData = [
   {
      Name = My SD0Name,
      Value = My SD0Value
   },
   {
      Name = My SD1Name,
      Value = My SD1Value
   }
]

Name=My%20name&Surname=My%20Surname&SomeData[0].Name=My%20SD0Name&SomeData[0].Value=My%20SD0Value&SomeData[1].Name=My%20SD1Name&SomeData[1].Value=My%21SD0Value

次に、URLを新しいテキストと連結する必要があります。

var someViewModel = new ToQueryString { Name = "My name", ... };
var querystring = someViewModel.ToQueryString();
Response.Redirect("http://somedomain.com/SomeAction?redirect=" + querystring, true);

HttpUtility.UrlEncode拡張機能がすでにこれを扱っているので、あなたは必要ありません。

@Matthewコメントを編集します。大きなクエリ文字列がある場合は、次のリストのようなツールを使用してクエリ文字列を圧縮し、値を連結できます。

c-compress-and-decompress-stringscompression
-decompression-string-with-c-sharp

この場合、Json形式を使用できます。すでに、テキストのzipを変数で送信しています。ただし、このパラメータを受け取るアクションを変更してから実行する必要があります。

Response.Redirect("http://somedomain.com/SomeAction?redirectZip=" + jsonStringZip, true);

このブログのコード:

public static class UrlHelpers
{
    public static string ToQueryString(this object request, string separator = ",")
    {
        if (request == null)
            throw new ArgumentNullException("request");

        // Get all properties on the object
        var properties = request.GetType().GetProperties()
            .Where(x => x.CanRead)
            .Where(x => x.GetValue(request, null) != null)
            .ToDictionary(x => x.Name, x => x.GetValue(request, null));

        // Get names for all IEnumerable properties (excl. string)
        var propertyNames = properties
            .Where(x => !(x.Value is string) && x.Value is IEnumerable)
            .Select(x => x.Key)
            .ToList();

        // Concat all IEnumerable properties into a comma separated string
        foreach (var key in propertyNames)
        {
            var valueType = properties[key].GetType();
            var valueElemType = valueType.IsGenericType
                                    ? valueType.GetGenericArguments()[0]
                                    : valueType.GetElementType();
            if (valueElemType.IsPrimitive || valueElemType == typeof (string))
            {
                var enumerable = properties[key] as IEnumerable;
                properties[key] = string.Join(separator, enumerable.Cast<object>());
            }
        }

        // Concat all key/value pairs into a string separated by ampersand
        return string.Join("&", properties
            .Select(x => string.Concat(
                Uri.EscapeDataString(x.Key), "=",
                Uri.EscapeDataString(x.Value.ToString()))));
    }
}
于 2013-02-13T03:55:48.073 に答える
0

HttpUtility.ParseQueryStringこの目的のために使用する必要があると思います。

msdnのドキュメントとStackoverflowのこのスレッドを確認してください

それが役に立てば幸い。

于 2013-02-13T04:37:11.887 に答える
0

これを試して:

string json = JsonConvert.SerializeObject(someModelVM);
Response.Redirect("http://somedomain.com/SomeAction?redirect=" + HttpUtility.UrlEncode(json), true);

これは、このUrlEncodeメソッドを使用して、JSONをクエリ文字列としてURLの一部としてエンコードします

于 2013-02-13T01:39:22.097 に答える