2017-11-24 3 views
0

선택한 파일의 전체 경로를보기의 모델로 설정하려고합니다.보기에서 모델링 할 선택된 파일의 경로를 설정하십시오.

컨트롤러 FileController :

public async Task<IActionResult> Create(CreateFileViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     var file = new File 
     { 
      Path = model.Path 
     }; 
     _context.Add(file); 
     await _context.SaveChangesAsync(); 
     return RedirectToAction(nameof(Index)); 
    } 
    return View(model); 
} 

모델 CreateFileViewModel :

public class CreateFileViewModel 
{ 
    public string Path { get; set; } 
} 

모델 파일 :

public class File 
{ 
    public int Id { get; set; } 
    public string Path { get; set; } 
} 

ViewForm 만들기 :

<form asp-action="Create"> 
    <div asp-validation-summary="All" class="text-danger"></div> 
    <div class="form-group"> 
     <label asp-for="Path" class="control-label"></label> 
     <input asp-for="Path" id="selectedFile" type="file" /> 
    </div> 
    <div class="form-group"> 
     <input type="submit" value="Create" class="btn btn-default" /> 
    </div> 
</form> 

스크립트의 생성이 작동하지

<script> 
    document.getElementById('selectedFile').onmouseout = function() { 
     @Model.Path=this.value; 
    }; 
</script> 

그러나

@Model.Path=this.value; 

. Ofc 나는 면도칼과 자바 스크립트 변수 사이를 변환 할 수 없습니다. 그러나 나는 모델 변수에 선택된 파일의 전체 경로를 설정하는 또 다른 방법을 모른다. 모델 변수로 이

<input asp-for="Path" id="selectedFile" type="file" /> 

세트는 경로없이 파일 이름.

답변

0

@Model.Path은 서버 측 코드 (예 : C# 코드)이고 this.value은 클라이언트 측 코드 인 자바 스크립트 코드이므로 js 코드가 html의 특정 이벤트에서 실행되는 동안 서버 측 코드가 실행될 수 있습니다.

자바 스크립트를 통해 숨겨진 값을 업데이트하면 업데이트 된 값으로 컨트롤러에 다시 게시되며 업데이트 된 값으로 HTML에서도 작동합니다. 당신이 쓸 수 있도록

숨겨진 필드는 ID Path 렌더링됩니다

document.GetElementById("Model").value = this.value; 

또는 당신이 JQuery와 라이브러리 응용 프로그램에 포함되어있는 경우에, 당신은뿐만 아니라 그것의 사용을 만들 수 있습니다

$("#Path").val(this.value); 

모델이 컨트롤러에 다시 게시 될 때이 방법으로 Path 속성은 js 코드를 통해 할당 한 경로가 업데이트 된 값을 갖게됩니다.

희망이 있습니다.

관련 문제