2013-04-23 35 views
29

Tôi muốn cập nhật giá trị mô hình trong JavaScript như dưới đây nhưng nó không hoạt động.Làm cách nào để cập nhật giá trị mô hình trong JavaScript trong chế độ xem Dao cạo?

function updatePostID(val) 
{ 
    @Model.addcomment.PostID = val; 
} 

trong Razor view như hình dưới đây

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> 
    } 
} 

bất cứ ai có thể cho tôi biết làm thế nào để gán giá trị mô hình trong JavaScript?

Trả lời

34

này nên làm việc

function updatePostID(val) 
{ 
    document.getElementById('PostID').value = val; 

    //and probably call document.forms[0].submit(); 
} 

Sau đó, có một trường ẩn hoặc điều khiển khác cho PostID

@Html.Hidden("PostID", Model.addcomment.PostID) 
//OR 
@Html.HiddenFor(model => model.addcomment.PostID) 
+0

nếu tôi sử dụng phần mở rộng html ẩn trong foreach loop html được tạo ra là foreach post document.getElementById ('addcomment_PostID'). value = val; , do đó addcomment_PostID sẽ được cập nhật là điểm và không hoạt động. đã đặt nó bên ngoài foreach và nó hoạt động. cảm ơn. – michaeld

+0

Nó không rõ ràng từ câu hỏi của bạn như thế nào bạn muốn truy cập vào PostID. Nếu nhiều được tạo, nó vẫn phụ thuộc vào cách bạn muốn xử lý chúng - như là mảng các điều khiển hoặc là cá nhân. Nếu sau này, bạn sẽ cần phải sử dụng 'Html.Hidden (" PostID _ "+ @ post.PostID)'. Bạn có thể chuyển nó tới hàm JavaScript. Nhưng tôi có thể nói tôi hoàn toàn hiểu những gì bạn đang cố gắng làm. Họ sẽ không bật lên trong mô hình của bạn như id/tên bây giờ không được biết trước – codingbiz

+0

tôi đang nhận được giá trị cập nhật trong mô hình – michaeld

10

Mô hình (@Model) chỉ tồn tại khi trang đang được xây dựng. Khi trang được hiển thị trong trình duyệt, tất cả những gì tồn tại là HTML, JavaScript và CSS.

Điều bạn sẽ muốn làm là đặt PostID vào trường ẩn. Khi giá trị PostID được cố định, thực sự không cần JavaScript. Một đơn giản @HtmlHiddenFor sẽ đủ.

Tuy nhiên, bạn sẽ muốn thay đổi foreach loop to a for loop của mình. Giải pháp cuối cùng sẽ giống như thế này:

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> 
    } 
} 
+0

Hi Jason, tôi đã sửa đổi với việc thêm mã nhiều hơn, ở đây chúng tôi có vòng lặp foreach để onclick nút nên nắm bắt mà bài id để mô hình giá trị trong javascript. Tôi nghĩ rằng trường hợp này html ẩn sẽ không hoạt động. Ngoài ra tôi đang đi qua mô hình để phương pháp hành động vì vậy "commentPostID" tài sản không thể được truy cập thay vì tôi muốn cập nhật Model.addcomment.PostID với giá trị id bài. – michaeld

+0

Nó sẽ hoạt động, chỉ cần làm: '' –

2

Bạn có thể sử dụng jQuery và một cuộc gọi Ajax để đăng cập nhật cụ thể trở lại máy chủ của bạn bằng Javascript.

Nó sẽ giống như thế này:

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 

    } 
    }); 

} 
Các vấn đề liên quan