だからここに私が遭遇している問題があります。
もともと、私は受信者フィールドに、最初に友達になったユーザーの選択リストを入力していました。
それは私には十分にユーザーフレンドリーではなかったようです。そこで、jQueryを使用したオートコンプリートの作業を開始しました。オートコンプリートは魅力のように機能します。
私が遭遇している問題は、私がメッセージを送信するときです、私modelstate
はメッセージとして有効ではありません。受信者にはユーザー名のみが入力されています。
検証を取り除き、これらすべてのフィールドに手動で入力する必要がありますか?それとも、この問題でもっと賢いことをすることができますか?
<div class="label">@Html.LabelFor(model => model.Receiver.UserName)</div>
<div class="fullinput">@Html.TextBoxFor(model => model.Receiver.UserName)</div><br />
<div class="label">@Html.LabelFor(model => model.Subject)</div>
<div class="fullinput">@Html.TextBoxFor(model => model.Subject)</div><br />
<div class="label">@Html.LabelFor(model => model.Content)</div>
<div class="fullinput">@Html.TextAreaFor(model => model.Content)</div><br />
それが私が使用しているhtmlです。
$("#Receiver_UserName").autocomplete({
source: function (request, response) {
$.ajax({
url: "/Function/FindUsers", // Or your controller
dataType: "json",
data: { usr: request.term },
success: function (data) {
// Returned data follows the Spellword model
response($.map(data, function (item) {
return {
id: item.Id,
label: item.UserName,
value: item.UserName
}
}))
}
});
},
これはオートコンプリート呼び出しです。
[HttpPost]
public ActionResult Send(Message message)
{
User user = entities.Users.SingleOrDefault(u => u.UserName.Equals(User.Identity.Name));
//ViewData["Friends"] = new SelectList(user.Friends, "Id", "Name");
if (ModelState.IsValid)
{
entities.Messages.Add(message);
entities.SaveChanges();
return RedirectToAction("Index");
}
return View(message);
}
そこで検証をチェックしますが、それは常に無効であり、理にかなっていると思います。
public class Message
{
[Key]
public int Id { get; set; }
[Required(ErrorMessage = "Subject is required")]
[Display(Name = "Subject")]
public string Subject { get; set; }
[Required(ErrorMessage = "Message is required")]
[Display(Name = "Message")]
public string Content { get; set; }
[Required]
[Display(Name = "Date")]
public DateTime Created { get; set; }
public Boolean Read { get; set; }
[Required(ErrorMessage = "Can't create a message without a user")]
public int SenderId { get; set; }
public virtual User Sender { get; set; }
[Required(ErrorMessage = "Please pick a recipient")]
public int ReceiverId { get; set; }
public virtual User Receiver { get; set; }
}
そして最後にメッセージモデル。明らかに、私はこれらすべてのフィールドを持っていないので、これがmodelstateが私に泣いている理由です。
この場合、modelstateのチェックをスキップできるのか、それとももっと良い方法でこれを修正する必要があるのか、疑問に思っています。