JavaScriptのモデル値を次のように更新したいのですが、機能しません。
function updatePostID(val)
{
@Model.addcomment.PostID = val;
}
以下に示すように、Razorビューで
foreach(var post in Model.Post)
{
<br/>
<b>Posted by :</b> @post.Username <br/>
<span>@post.Content</span> <br/>
if(Model.loginuser == Model.username)
{
@Html.TextAreaFor(model => model.addcomment.Content)
<button type="submit" onclick="updatePostID('@post.PostID');">Add Comment </button>
}
}
JavaScriptでモデル値を割り当てる方法を教えてもらえますか?
これは動作するはずです
function updatePostID(val)
{
document.getElementById('PostID').value = val;
//and probably call document.forms[0].submit();
}
次に、PostID
の非表示フィールドまたはその他のコントロールを用意します
@Html.Hidden("PostID", Model.addcomment.PostID)
//OR
@Html.HiddenFor(model => model.addcomment.PostID)
モデル(@Model
)は、ページの構築中にのみ存在します。ブラウザーでページがレンダリングされると、存在するのはHTML、JavaScript、CSSのみです。
あなたがしたいことは、PostIDを隠しフィールドに入れることです。 PostID値が固定されているため、実際にはJavaScriptは必要ありません。シンプルな @HtmlHiddenFor
十分であろう。
ただし、 foreachループをforループ に変更する必要があります。最終的なソリューションは次のようになります。
for (int i = 0 ; i < Model.Post; i++)
{
<br/>
<b>Posted by :</b> @Model.Post[i].Username <br/>
<span>@Model.Post[i].Content</span> <br/>
if(Model.loginuser == Model.username)
{
@Html.HiddenFor(model => model.Post[i].PostID)
@Html.TextAreaFor(model => model.addcomment.Content)
<button type="submit">Add Comment</button>
}
}
jQueryとAjax呼び出しを使用して、特定の更新をJavascriptでサーバーにポストバックできます。
次のようになります。
function updatePostID(val, comment)
{
var args = {};
args.PostID = val;
args.Comment = comment;
$.ajax({
type: "POST",
url: controllerActionMethodUrlHere,
contentType: "application/json; charset=utf-8",
data: args,
dataType: "json",
success: function(msg)
{
// Something afterwards here
}
});
}