を継承するクラスを受け入れることはありませんこの上記のコードは、得られたデータセットに含まれる各アドレスからアドレスを構築し、その目的は、背面に各アドレスを記憶するようにNULLを返すContentResultに送り返しASP.NET MVC 3 ContentResultは、これは私がここに尋ねた別の質問を、以下の別のクラス
var loc = new Array();
loc[0] = results[i].Longitude;
loc[1] = results[i].Latitude;
var address = {
AddressLine1: results[i].Address,
City: results[i].City,
State: results[i].StateOrProvince,
PostalCode: results[i].PostalCode,
Latitude: results[i].Latitude,
Longitude: results[i].Longitude,
Country: results[i].CountryOrRegion,
ID: results[i].UniqueId
};
$.ajax({
url: "/Home/AddAddressToCollection",
type: 'post',
data: JSON.stringify(address),
contentType: 'application/json',
dataType: 'json'
});
:次のコードを追加しましMongoDBです。なぜ私がこのアプローチを取っているのか疑問に思うかもしれません。アドレスはMongoDBのシードデータです。アイデアはこれがオープンソースプロジェクトであることと、開発者のGeoLocationで検出された場所に対応するローカライズされたアドレスセットを与えることでパーソナライゼーションを追加したいと考えています。ここで
はにHomeControllerでContentResultのコードです:
[HttpPost]
public ContentResult AddAddressToCollection(Address address)
{
address.GeoInsert(_dbName, ref _repository);
return null;
}
私のアドレスクラスはそうのように表示されたときにこのコードはcorresponing POSTメソッドで作業を行います。
パブリッククラスAddress { プライベートダブル_latitude ; プライベートdouble _longitude;私は好奇心が強いところ
[Key]
[Required]
[HiddenInput(DisplayValue=false)]
public string ID { get; set; }
[Required]
[HiddenInput(DisplayValue = false)]
public virtual Guid AccountID { get; set; }
[Required]
[Display(Name = "Address Line 1")]
public string AddressLine1 { get; set; }
[Display(Name = "Address Line 2")]
public string AddressLine2 { get; set; }
[Required]
[Display(Name = "City")]
public string City { get; set; }
[Required]
[Display(Name = "State")]
public string State { get; set; }
[Required]
[Display(Name = "Zip Code")]
public string PostalCode { get; set; }
public string Country { get; set; }
[Required]
[HiddenInput(DisplayValue = false)]
public double[] Location { get; set; }
[Required]
[HiddenInput(DisplayValue = false)]
public double Latitude
{
get { return _latitude; }
set
{
Location[1] = value;
_latitude = value;
}
}
[Required]
[HiddenInput(DisplayValue = false)]
public double Longitude
{
get { return _longitude; }
set
{
Location[0] = value;
_longitude = value;
}
}
public Address()
{
Location = new double[2];
}
public void GeoInsert(string dbName, ref Repository repository)
{
repository.MongoGeoInsert(dbName, this);
}
public Dictionary<Address, double> GeoNear(string dbName, ref Repository repository, double maxKilometers, int limitResults)
{
return repository.MongoGeoNear<Address>(dbName, this.Latitude, this.Longitude, maxKilometers, limitResults);
}
}
しかし、ここでは、私は今、これを必要としませんが、私が最初にいくつかのカスタムを支援するために、同じ基本クラスから継承するために私のモデルに私のクラスのすべてを持ってしようとした...です私が使用する直列化メソッド。私がそのようなクラスから継承するとき、それをBaseClassと呼ぶことにしましょう、POSTはもはや動かず、私はサーバーから500の応答を得ます...私は理由が何であるかはっきりしていません。ここでは、私が話していることの例を示します(psでは、以下のコードを使用した場合、シリアライズのためにディクショナリを使用する方法を理解する必要があるというヒントですが、
をこんなに早く、Addressクラスのために、私が持っているでしょう:
住所:ように反射して、私は)ここに一緒に行くんだよBaseClassの
をし、コンストラクタは次のようになり...
住所:base( "Address") { //ベース( "Address")は必要ありませんがあなたは辞書に //シリアライズ方法 }今
BaseClassの...
public class Serialization
{
public abstract class BaseObject
{
[BsonId(IdGenerator = typeof(CombGuidGenerator))]
public Guid? Id { get; set; }
public string ObType { get; private set; }
public BaseObject() : this("base") { }
public BaseObject(string obType)
{
ObType = obType;
Id = Guid.NewGuid();
}
public virtual BaseObject Parse(XElement xml)
{
PropertyInfo[] properties = this.GetType().GetProperties();
foreach (var property in properties)
{
ElementName attribute = Attribute.GetCustomAttribute(property, typeof(ElementName)) as ElementName;
if (attribute == null) continue;
object value = null;
string stringValue = xml.Element(attribute.Name).Value;
switch (property.PropertyType.Name.ToLower())
{
case "double":
{
value = double.Parse(stringValue);
break;
}
default:
{
value = stringValue;
break;
}
}
property.SetValue(this, value, null);
}
return this;
}
}
public class Serializer
{
public static T Deserialize<T>(XElement xml)
where T : BaseObject, new()
{
BaseObject obj = new T() as BaseObject;
if (obj != null)
{
//populate obj properties...
obj.Parse(xml);
}
return obj as T;
}
}
}
大丈夫を使用している場合を除き、私はそれが十分情報をすべきだと思います...任意のアイデアはどのようなことはないだろう作業?うまくいけば、私はここで非常に明白な何かを見逃しているわけではありません...しかし、私はASP.NETプログラミングよりもはるかにSilverlightを行うので、私は完全に可能です0:
ありがとう!
ファイアバグを開いて、どのようなエラーが表示されますか? –
ええ、これはかなり標準的な500のエラーです: POST/Home/AddAddressToCollection 500内部サーバーエラー 私はクライアント側のコードを知っているので、MVCフレームワークがコンテンツとアクションの結果を処理する方法と関係があると思います(BaseClassから継承していないときに動作するため) – Jordan